先來看一段簡單的程式
#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,按結束回車時。出現這樣的結果:
不等你輸入第二個字元,程式自動輸出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");
}
運作結果如圖:
調用函數把緩沖區裡的空間删除,于是乎就可以輸入第二個字元了
留一個問題:
#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!.其實道理跟我今天講得是一樣的,自己分析看看吧