#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 時因爲緩衝區中沒有數據,就會等待用戶輸入。 */
scanf
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.