scanf輸入字元和數字的問題
scanf是c語言中的常用函式,使用前匯入stdio.h
這裡講一些經常遇到的問題。
首先要明白scanf的本質。當我們需要呼叫scanf輸入的時候,輸入的字元送到鍵盤緩衝區,然後scanf從中讀取所規定的字元,比如我們scanf中要求的是%d,即數字型,那麼屬於數字的內容將被讀取,當遇到不屬於數字的內容時,掃描終止,比如我們輸入的是5s5555,那麼只有第一個5能接收,如果輸入8 555,那麼也只有第一個8能收到。但是沒有收到的部分並不是被拋棄,而是繼續保留在緩衝區中,當需要下一次scanf時,從緩衝區讀資料。
1,字串注意事項。
字串需要注意的是,空格和回車也會被scanf認為是字元,所以,舉個例子
#include <stdio.h>
int main(){
int a;
char b;
scanf("%d",&a);
scanf("%d",&b);
}
輸入 8 回車
會發現程式即終止,原因是因為,當我們輸入8然後回車時,回車符任然留在緩衝區,然後被scanf掃描給b。
還要注意的是scanf在接受字串時候遇到空格也會終止,解決辦法是限定掃描集合
scanf("%[^\n]s",str);或者是用gets函式
解決辦法是getchar();或者是fflush(stdin);後者是將緩衝區清空;
再看下面一個
scanf("%c %c",&a,&b);
scanf("%c%c",&a,&b);
上面兩個語句有什麼區別呢?
其實區別就在於,第一個說明了用空格符作為間隔符。對於第二個語句,如果輸入
A空格
那麼打印出來a,b變數就分別是A和空格,但是對於第一個,則會一直等待另一個字元的輸入,另外,第一個也不要求一定要有空格,如果輸入cc則a和b都是c。也就是說,它的真正意義是空格會被忽略,不止是空格,換行符也會被跳過。
2,數字
數字,可以容納大小長度,如%4d,那麼他限制四個位,如果不足沒有關係,比如輸入8s8888,那麼只有第一個8,如果輸入的位數超過那麼只有前面四個
如88889999,只有8888;
本文來自 zzxsw 的CSDN 部落格 ,全文地址請點選:https://blog.csdn.net/izzxacbbt/article/details/78044331?utm_source=copy