【字符串】scanf函數輸入字符串詳解


除了在定義字符數組時初始化外,還可以通過scanf從鍵盤輸入字符串。下面寫一個程序:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main(void)
 4 {
 5     char str[10];//str是string的縮寫,即字符串
 6     printf("請輸入字符串:");
 7     scanf("%s",str);//輸入參數是已經定義好的"字符數組名",不用加&,因為在C語言中數組名就代表該數組的起始地址
 8     printf("輸出結果:%s\n",str);
 9     return 0;
10 }

用 scanf 給字符數組賦值不同於對數值型數組賦值。前面講過,給數值型數組賦值時只能用 for 循環一個一個地賦值,不能整體賦值。而給字符數組賦值時可以直接賦值,不需要使用循環。此外從鍵盤輸入后,系統會自動在最后添加結束標志符 '\0'。但是用 scanf 輸入字符串時有一個地方需要注意:如果輸入的字符串中帶空格,比如“i love you”,那么就會有一個問題。我們將上面程序運行時輸入的字符串改一下:

 
1 # include <stdio.h>
2 int main(void)
3 {
4     char str[10];  //str是string的縮寫, 即字符串
5     printf("請輸入字符串:");
6     scanf("%s", str);  //輸入參數是已經定義好的字符數組名
7     printf("輸出結果:%s\n", str);
8     return 0;
9 }

我們看到,輸入的是“i love you”,而輸出的只有“i”。原因是系統將空格作為輸入字符串之間的分隔符。也就是說,只要一“敲”空格,系統就認為當前的字符串已經結束,接下來輸入的是下一個字符串,所以只會將空格之前的字符串存儲到定義好的字符數組中。

那么這種情況該怎么辦?那么就以空格為分隔符,數數有多少個字符串,有多少個字符串就定義多少個字符數組。比如“i love you”有 兩個空格,表示有 三個字符串,那么就定義三個字符數組:
 
1 #include <stdio.h>
2 int main(void)
3 {
4     char str1[10],str2[10],str3[10];
5     printf("請輸入字符串:");
6     scanf("%s%s%s",str1,str2,str3);
7     printf("輸出結果:%s %s %s\n",str1,str2,str3);//%s間要加空格
8     return 0;
9 }
需要注意的是,前面講“ 清空緩沖區”的時候講過,用 scanf 輸入時,不管輸入什么,最后“敲”的回車都會被留在緩沖區,這里也不例外。輸入字符串時最后“ 敲”的回車也會被留在緩沖區,如果緊接着要給一個字符變量賦值的話,那么還沒等你輸入系統就自動退出來了。因為系統自動將回車產生的字符 '\n' 賦給該字符變量了,所以此時對字符變量賦值前要首先清空緩沖區。
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM