1. 程式人生 > >scanf輸入字元和數字的問題

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