我一直在搜索這個問題幾個小時,至今我還沒有看到任何提及它。調用fgets()兩次導致第二次調用不完成
int getInt()
{
char* rawin = (char*)malloc(100);
printf("How big should the secret code be?\n(Input number of elements):\n");
while(fgets(rawin, 100, stdin) != NULL)
{
if (sscanf(rawin,"%d") == 1)
{
break;
}
printf("Numbers only please.\n");
}
int in = atoi(rawin);
free(rawin);
return in;
}
如果我調用此函數兩次,我叫哪一個首先能正常工作,但第二個行爲異常。程序的行爲就像在fgets上無限循環一樣,而不是進入while循環。 fgets的第二個調用永遠不會完成,所以永遠不會返回任何東西。調試時,在「while(fgets ...)」之後的任何位置放置斷點,包括循環之後,永遠不會到達。我試圖在標準輸入的結尾附加「\ n」,「\ 0」和「\ n \ 0」 ,它什麼都沒做,我試着通過讀出每個不是'\ n'或\ 0'的字符來試圖'沖洗'stdin,這也沒有任何作用。
編輯:澄清,'if 「語句是一個佔位符
「for」代表什麼? – 2013-03-21 13:18:38
您確定有足夠的輸入可以被第二輪循環讀取嗎?如果'stdin'上的緩衝區爲空,'fgets'將會被阻塞。輸入來自哪裏?如果你的第一次迭代從來沒有你的break條件,那麼第一個while循環將被讀取直到'EOF',第二個循環將無限期地阻塞,除非任何發送輸入決定恢復管道併發送更多數據。 – 2013-03-21 13:19:29
@HalimQarroum:這應該是一個佔位符。將解決。 – CybeatB 2013-03-21 13:20:43