1 由于scanf函數在接收數據時,是通過空格來區分數據項的.
如果你:
char c[20];
scanf("%s",c);
輸入:this is a c program!
它接收到this后遇到空格,認為對應%s的數據項已結束,后面的(包含空格)不能輸入。
你想輸入帶空格的字符串,只有使用gets(c);
但遺憾的是用gets()函數一次只能輸入一個字符串。
2 總結
%d,遇到數字,'+','-'以外的字符結束,可跳過空格
%f,,%lf:遇到數字, '.', 'e','+','-'之外的字符結束,可跳過空格
%s,從第一個非空格字符起直到下一個空格結束.
%c,遇到字符就賦值,不管是空格還是回車之類的.
假如程序中出現這樣的代碼,scanf("%d,%s,%c,%c").雖然程序是以 ', '作為分隔的,但%s是不認這個 ', '的,它只認空格,所以會出現變量不能正確賦值的情況,如果你將','去掉,但由于%c卻遇到空格又不會跳過,所以也不會滿足需要,通過上面的我們知道,%c遇到空格是不會跳過的,所以我采取下面這個方式來解決,在%c的前面加一個空格來處理,這樣就可以解決上面的所有問題了,所以我們在使用%c時,要在前面加上一個空格,養成這種習慣可以省去不少麻煩,并且在使用%c之前最好還加上一句fflush(stdin);用來清除緩存.
3 gets()
功能:從stdin流中讀取字符串,直至接受到換行符或EOF時停止,并將讀取的結果存放在str指針所指向的字符數組中。換行符不作為讀取串的內容,讀取的換行符被轉換為null值,并由此來結束字符串。
注意:本函數可以無限讀取,不會判斷上限,所以程序員應該確保str的空間足夠大,以便在執行讀操作時不發生溢出。
實例:#include"stdio.h"
void main()
{
char str[15];
gets(str);
printf("%s/n",str);
}