天天看點

C語言:scanf()語句錯誤讀取scanf()語句錯誤讀取

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

輸出:

C語言:scanf()語句錯誤讀取scanf()語句錯誤讀取

    如果在輸入中輸入一個字母scanf将會自動讀取上一次輸入的值,不能再次輸入。

輸入:1 2 3 4 q 5 6 7 8 9

輸出:1 2 3 4 4 4 4 4 4 4

C語言:scanf()語句錯誤讀取scanf()語句錯誤讀取

輸入:1 2 3 4 q

輸出:1 2 3 4 4 4 4 4 4 4

C語言:scanf()語句錯誤讀取scanf()語句錯誤讀取

    要解決這個問題需要在循環中添加一個清空緩存的語句

fflush(stdin);
           

但這樣scanf()每次隻能讀取一個數,是以需要用enter來間隔。

輸入:1 2 3 4 q 5 6 7 8 9

輸出:1 2 3 4 5 6 7 8 9

C語言:scanf()語句錯誤讀取scanf()語句錯誤讀取

(因為再輸入q時,scanf()未讀取q,但i仍加1,是以隻輸入9個數就完成程式)



繼續閱讀