c語言中的輸入函式(包括scanf,getchar等)在接收鍵盤輸入時,把輸入放在了「輸入緩衝區」。當scanf()、getchar()做輸入操作時,以回車符作為結束標誌,並把回車符' /n '包含在輸入字串中儲存在緩衝區,再從輸入緩衝區中取走輸入字串賦值給變數,但卻沒有取走回車符'/n'。再當我們二次呼叫scanf()時,scanf()函式被跳過,」得不到執行「。因為這時輸入緩衝區依然保留了前次輸入的時候留下的回車符'/n',故直接跳過。注:當輸入為字元時,緩衝區中遺留下了'/n',當輸入為int 時,則不發生該情況。
解決辦法:
c語言中有乙個清除緩衝區的函式int fflush(file*),即
fflush(stdin) 該函式在中定義。具體到本程式,需要清除的緩衝區是鍵盤緩衝區stdin。需要在scanf呼叫後面徹底清空緩衝區。
例:#include
int main( )
char a[100]="";
char b = 'q';
scanf("%s", a); //需要在輸入後手動清空緩衝區,加入fflush(stdin) 即可避免。
b = getchar();
printf("a = %s , b= %c/n",a,b);
return 0;
例:#include
int main( )
char i;
doscanf("%c",&i);
printf("i= %c ,/n",i);
}while(1);
return 0;
我們定義了乙個字元變數i,當我們輸入abcd 時,則每次scanf都會從輸入緩衝區中讀出乙個字元給i,則輸出結果為:
abcd
i= a ,
i= b ,
i= c ,
i= d ,
i=----- 此處接著輸入,上面有兩個'/n'。
得出,scanf()做輸入操作時,首先會檢查輸入緩衝區是否為空,不為空,則從緩衝區中讀取資料。
scanf 函式緩衝區
1當使用scanf函式接受使用者資料時,輸入的資料不會直接賦值給變數,而是首先將輸入的資料存入緩衝區,輸入的全部資料都會儲存在緩衝區中包括 空格 tab 回車 2當執行scanf函式時會先檢查緩衝區中是否有資料,如果有則直接從緩衝區取出資料賦值給變數,不會讓使用者輸入資料,如果沒有才會讓使用者從控制...
C語言scanf 與緩衝區
scanf函式返回值 正整數,表示正確輸入引數的個數。例如執行 scanf d d a,b 如果使用者輸入 3 4 可以正確輸入,返回2 正確輸入了兩個變數 如果使用者輸入 3,4 可以正確輸入a,無法輸入b,返回1 正確輸入了乙個變數 0,表示使用者的輸入不匹配,無法正確輸入任何值。如上例,使用者...
輸入緩衝區與輸出緩衝區
本博文通過一段程式來理解輸入緩衝區與輸出緩衝區。程式如下 author wanghao created time thu 17 may 2018 06 03 12 ampdt file name test.c description include int main int argc,const c...