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,按结束回车时。出现这样的结果:

a4c26d1e5885305701be709a3d33442f.png

不等你输入第二个字符,程序自动输出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");

}

运行结果如图:

a4c26d1e5885305701be709a3d33442f.png

调用函数把缓冲区里的空间删除,于是乎就可以输入第二个字符了

留一个问题:

#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!.其实道理跟我今天讲得是一样的,自己分析看看吧

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值