當有多個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