清空stdin中的緩存
int c;
while((c = getchar()) != EOF && c != '\n');
會把緩存清空,但是會遺留下'\n' (10)
讀取時,可以使用 scanf("%[^\n]",c);來空過\n。
或 scanf("\n%d",c);
失敗的解決方案:
1,
while(!feof(stdin)){
getchar();
}
結果:程序會卡在這段,永遠出不了while循環。
因為feof(FILE* file )函數必須等下一次讀取不到數據使,才會返回非0;如讀取空文件時,直接用feof(file)返回的是0,而用一下
fread()函數后,雖然什么都沒有讀到,但是feof(file)就返回非0了;
所以就會造成雖然到了結尾了,但是feof(stdin)返回的還是0,然后程序就會卡在getchar(),等待輸入。
2,
fflush(stdin);
使用后無效,查了一下,此函數不是標准函數,VC編譯器可以使用,但是其他的編譯器如gcc是不支持的(注:fflush(stdout)是標准函數)
3,
while((c = getchar()) != EOF && c != '\n');此時緩沖區第一個字符是'\n'。
scanf("%*[\n]%d",c); 此時c讀取的是\n,沒有讀到后面的輸入,導致程序錯誤。
沒想明白為什么,%【\n】不是讀到第一個非\n時停止嗎,加上星號忽略這個,然后%d就可以讀到輸入。但是結果不對,請大俠解答謝謝!
4,
用setbuf(stdin, NULL);清空緩存
setbuf的函數原型是
