除了在定義字符數組時初始化外,還可以通過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' 賦給該字符變量了,所以此時對字符變量賦值前要首先清空緩沖區。