天天看點

C語言設定輸入緩沖區大小,C語言中輸入緩沖區的問題

先來看一段簡單的程式

#include

#include

int main(){

char a, b;

a = getchar();

if(a == '1'){

printf("a = 1\n");

}else{

printf("a != 1\n");

}

b = getchar();

if(b == '1'){

printf("b = 1\n");

}else{

printf("b != 1\n");

}

}

程式想達到這樣一個目的:輸入兩個字元,判斷是否為1。若是則輸出字元等于1,若不是則輸出不等于1.但是

當我在VC6.0裡輸入第一個字元1,按結束回車時。出現這樣的結果:

C語言設定輸入緩沖區大小,C語言中輸入緩沖區的問題

不等你輸入第二個字元,程式自動輸出b!=1,原因很簡單,當你輸入第一個字元1按回車結束時,1傳給了字元a,回車留在了緩沖區裡,于是乎當你還想第二次輸入字元b時,系統緩沖區就直接把回車給了b,回車當然不等于1啦,是以出現了上述現象

解決這問題,也很簡單。可以調用到fflush(stdin);了:stdin是預設的輸入流檔案,對應輸入緩沖,而fflush(stdin);就可以清空整個輸入緩沖區

同樣的程式,在輸入第二個字元前加上fflush(stdin);

char a, b;

a = getchar();

if(a == '1'){

printf("a = 1\n");

}else{

printf("a != 1\n");

}

fflush(stdin);//清空緩沖區

b = getchar();

if(b == '1'){

printf("b = 1\n");

}else{

printf("b != 1\n");

}

運作結果如圖:

C語言設定輸入緩沖區大小,C語言中輸入緩沖區的問題

調用函數把緩沖區裡的空間删除,于是乎就可以輸入第二個字元了

留一個問題:

#include

int main()

{

char s[10],s1[10],s2[10],s3[10];

scanf("%s",&s);

printf("%s\n",s);

scanf("%s%s%s",&s1,&s2,&s3);

printf("%s %s %s\n",s1,s2,s3);

system("pause");

return 0;

}

當我兩次都輸入Iam a student!結果為什麼是:

Iam a student!

I

Iam a student!

am a Student!

其中藍色是我輸入的部分,而紅色是程式輸出的結果,可以看到第二次程式沒有輸出I am a

student!而是輸出了am a

student!.其實道理跟我今天講得是一樣的,自己分析看看吧