C語言編程在Xcode中Scanf 輸入跳過以及清空鍵盤緩衝區總結


當有多個scanf接收輸入的時候,一般都要在一個scanf執行完成後進行緩衝區清空,否則如果上次輸入存在不符合規則的輸入時,就會出現數據殘留,不會被利用完全,這時後面的scanf會跳過,自動接收鍵盤緩衝區無效字符!!

 

清空鍵盤緩衝區很多種方法:

如用fflush(stdin);等,但是在linux和蘋果MAC電腦Xcode上這些都不起作用;

 

以下是個人總結在Xcode7.3總能夠清空鍵盤緩衝區的 六種 方法:

//清除scanf緩存區的內容;直接在每個scanf()之後寫入,就行!!

//    scanf("%*[^\n]");     //方法一

//    setbuf(stdin, NULL);  //方法二

//    while(getchar() != '\n') continue;  //方法三

//    rewind(stdin);        //方法四

//定義要輸入的變量 //方法五

char charValue2;

while ( (charValue2 = getchar()) != '\n'&& charValue2 != EOF); //方法五

scant("%c",charValue2);


// 利用一個不用的緩衝區來接收鍵盤緩衝區;//方法六

#define BUFMAX 256 //定義緩衝區中滯留的字符數最大值

char buftemp[BUFMAX];//用於存取緩衝區的字符

//在每一個scanf之後加上

gets(buftmp);

//讀取緩衝區無效字符,不做處理,即可丟棄

 




其他網友

scanf("%[^\n]%*c",str);//讀入一行字符串

%*c的作用是讀入\n

"*"表示該輸入項讀入後不賦予任何變量,即跳過該輸入值。

^表示"",即讀入其後面的字符就結束讀入。

 

於是,有了另一種改法:把所有的scanf()全用上面那中形式,即

scanf("%[^\n]%*c",str);就行了


參考:C語言編程—清空鍵盤緩衝區,Linux和Windows下完美實現

http://www.ludou.org/c-clear-buffer-area.html

 

參考:C語言編程的時候清除緩存總結http://blog.chinaunix.net/uid-27183448-id-3370623.html

 

參考:http://blog.chinaunix.net/uid-27183448-id-3370623.html

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章