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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章