scanf()語句錯誤讀取
在上一星期的文章中,每一次遇到功能選擇時,總是會以輸入選項所代表的數字表示,而在讓一個大神幫忙看看時,發現一個問題:當輸入不是數字時scanf()語句将保持不讀取狀态,當程式運作到這裡時scanf()将會維持上一次讀取數,不讀取新内容,檢查了好久都不知道問題,當時大神發話,這絕對是scanf()讀取出問題了,應當有一個函數可以清空緩存還是什麼的,解決這個問題,結果回來一查,立即對大神佩服的五體投地。
以這個程式為例:
#include<stdio.h>
int main()
{
int array[10];
int temp;
int i,j;
printf("input ten numbers(between -32768 and +32767):\n");
for(i=0;i<10;i++)
{
scanf("%d",&temp);
if(temp<-32768 || temp>32767)
{
i--;
printf("number must between -32768 and +32767\ntry again:\n");
continue;
}
else
{
array[i]=temp;
}
}
printf("your numbers:\n");
for(j=0;j<10;j++)
{
printf(" %d ",array[j]);
}
printf("\ngod bye\n");
return 0;
}
如果在開始輸入時輸入一個字母将進入死循環。
輸入:q
輸出:
如果在輸入中輸入一個字母scanf将會自動讀取上一次輸入的值,不能再次輸入。
輸入:1 2 3 4 q 5 6 7 8 9
輸出:1 2 3 4 4 4 4 4 4 4
或
輸入:1 2 3 4 q
輸出:1 2 3 4 4 4 4 4 4 4
要解決這個問題需要在循環中添加一個清空緩存的語句
fflush(stdin);
但這樣scanf()每次隻能讀取一個數,是以需要用enter來間隔。
輸入:1 2 3 4 q 5 6 7 8 9
輸出:1 2 3 4 5 6 7 8 9
(因為再輸入q時,scanf()未讀取q,但i仍加1,是以隻輸入9個數就完成程式)