空白符問題
int main(void){int a;printf("input the data ");scanf("%d ",&a); //這里多了一個(gè)回車符printf("%d",a);return 0;}
結(jié)果要輸入兩個(gè)數(shù)程序才結(jié)束,而不是預(yù)期的一個(gè)。why?
原因用空白符結(jié)尾時(shí),scanf會(huì)跳過空白符去讀下一個(gè)字符,所以你必須再輸入一個(gè)數(shù)。這里的空白符包括空格,制表符,換行符,回車符和換頁(yè)符。所以如果你用scanf("%d ",&a)也會(huì)出現(xiàn)同樣的問題。解決方法這種錯(cuò)誤大多是輸入的時(shí)候不小心,多注意一點(diǎn)就好了。這種問題也不好檢查,編譯沒有問題,一個(gè)空格也不容易看出來(lái)。當(dāng)你的程序出現(xiàn)上面的問題時(shí),自己對(duì)照檢查一下就可以了。回車符也占位
main(){int n = 5;char c[n];for(int i = 0; i < n; i++)c[i] = scanf("%c",&c[i]);printf(c);return 0;}
如果輸入:
abc
那么循環(huán)就會(huì)“提前”結(jié)束了。
原因
輸入a和第一個(gè)回車后,a和這個(gè)回車符都留在緩沖區(qū)中。第一個(gè)scanf讀取了a,但是輸入緩沖區(qū)里面還留有一個(gè) ,第二個(gè)scanf讀取這個(gè) 。然后輸入b和第二個(gè)回車,同樣的,第三個(gè)scanf讀取了b,第四個(gè)scanf讀取了第二個(gè)回車符。第五個(gè)讀取了c。所以五個(gè)scanf都執(zhí)行了,并沒有提前結(jié)束。只不過有的scanf讀取到了回車符而已。
解決方法
1.不輸入回車符,直接輸入字符。 2.用gets()函數(shù),如:main(){char c[5];gets(c);printf(c);return 0;}
scanf()函數(shù)的參數(shù)輸入類型不匹配問題
在某度見到的問題:
#includemain(){int a=123;char c='t';printf("input ");scanf("%d%c",&a,&c);scanf("%d%c",&a,&c);scanf("%d%c",&a,&c);printf("%d %c ",a,c);return 0;}
當(dāng)輸入a 回車 后,會(huì)直接跳過下面2個(gè)scanf語(yǔ)句,直接輸出為:
123t
原因
對(duì)于scanf("%d%c",&a,&c),scanf語(yǔ)句執(zhí)行時(shí),其中有一個(gè)參數(shù)不匹配,那就從這個(gè)地方跳出,忽略這個(gè)scanf后面所有的參數(shù),而去執(zhí)行下一條語(yǔ)句。
解決方法
scanf()函數(shù)執(zhí)行成功時(shí)的返回值是成功讀取的變量數(shù),也就是說(shuō),你這個(gè)scanf()函數(shù)有幾個(gè)變量,如果scanf()函數(shù)全部正常讀取,它就返回幾。但這里還要注意另一個(gè)問題,如果輸入了非法數(shù)據(jù),鍵盤緩沖區(qū)就可能還有殘余信息問題。
比如:
main(){int a=123,b;while(scanf("%d%d",&a,&b)!=2)fflush(stdin);printf("%d %d ",a,b);return 0;}
還有個(gè)辦法:只要用scanf("%[^ ]",strings); 就可以了。很神奇吧。還要注意方括號(hào)兩側(cè)都不能加空格。
-
C語(yǔ)言
+關(guān)注
關(guān)注
183文章
7644瀏覽量
145576 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4417瀏覽量
67502 -
代碼
+關(guān)注
關(guān)注
30文章
4968瀏覽量
73960 -
編譯
+關(guān)注
關(guān)注
0文章
694瀏覽量
35158
原文標(biāo)題:C語(yǔ)言中scanf函數(shù)的常見問題
文章出處:【微信號(hào):c-stm32,微信公眾號(hào):STM32嵌入式開發(fā)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
為什么c語(yǔ)言沒有輸出?
C語(yǔ)言回調(diào)函數(shù)原來(lái)這么簡(jiǎn)單
C語(yǔ)言中實(shí)現(xiàn)函數(shù)宏的三種方式
單片機(jī)c語(yǔ)言中定義字節(jié)怎么定義?
請(qǐng)問C語(yǔ)言中整形溢出對(duì)哪些應(yīng)用場(chǎng)景影響較大?
Typedef在C語(yǔ)言中的應(yīng)用
CW32系統(tǒng)有哪些常見問題?
scanf函數(shù)介紹
C語(yǔ)言的常見算法
C語(yǔ)言中的內(nèi)聯(lián)函數(shù)與宏
Windows環(huán)境下32位匯編語(yǔ)言中文資料
deepin 25系統(tǒng)安裝常見問題
剖析C語(yǔ)言中scanf函數(shù)常見問題
評(píng)論