scanf

#include <stdio.h>
#include <stdlib.h>
int main()
{
    int a, b, c, age;
    float scores;
    scanf("a=%d,b=%d,c=%d", &a, &b, &c);
    printf("a+b+c=%d\n\n", (a+b+c));
    //fflush(stdin);  // 清空緩衝區
    scanf("Tom's age is %d, his scores is %f.", &age, &scores);
    printf("age=%d, scores=%f.\n", age, scores);
    system("pause");
    return 0;
}
/*在內存中,有一塊區域(比如512字節)專門用來保存用戶輸入的數據,遇到 scanf 時,程序會首先檢查該區域是否有數據:
如果沒有,就等待用戶輸入,用戶從鍵盤輸入的每個字符都會暫時保存到這裏,直到按下回車鍵,輸入結束,scanf 
再從這裏讀取數據,賦值給變量。
如果有數據,哪怕是一個字符,scanf 也會直接讀取,不會等待用戶輸入。

這塊內存區域,就叫做緩衝區(Buffer),或者緩存(Cache);又因爲它是用來暫存用戶輸入的數據的,所以又叫輸入緩
衝區。
緩衝區與普通的內存沒有什麼兩樣,都是物理內存上的若干字節,只是作用不同而已。
上面的代碼如果沒有fflush(stdin);,運行時就會大有不同:
a=23,b=900,c=399↙
a+b+c=1322

age=4239360, scores=0.000000.
第一次輸入後,程序並沒有等待我們第二次輸入,age 和 scores 都是無效值。這是因爲,第一次輸入的數據爲a=23,
b=900,c=399↙(包含最後的回車),回車後 scanf 讀取到的數據是a=23,b=900,c=399,還有一個回車符留在緩衝區,
遇到第二個 scanf 時,因爲緩衝區中有數據,所以會直接讀取,不給我們輸入的機會。

所以要用fflush(stdin);來清空緩衝區,這樣遇到第二個 scanf 時因爲緩衝區中沒有數據,就會等待用戶輸入。 */ 

發佈了68 篇原創文章 · 獲贊 5 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章