返回信息流int num = 0;
while(1)
{
num++;
char a = 'n';
printf("input y/n:");
scanf("%c",&a);
//cin>>a;
if(a=='n')
{
printf("num is:%d\n",num);
break;
}
}
就这么一段非常小的代码,在执行时如果用scanf输入则在输入一个y时直接打印两个“input y/n:”
这是为什么?但是用cin则就是正常的。
input y/n:y
input y/n:input y/n:y
input y/n:input y/n:y
input y/n:input y/n:n
num is :7
这是一条镜像帖。来源:北邮人论坛 / cpp / #40599同步于 2010/6/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
C语言中的scanf问题请教,附例子
abc0
2010/6/20镜像同步10 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 abc0 的大作中提到: 】
: int num = 0;
: while(1)
: {
: ...................
你输入的是y和回车,y被放在a里了,回车留在输入序列中,下次循环的时候回车读给a了,就打印了两遍,你可以把num打出来算算。
可以在后面加getchar()解决(我没记错的话是这个,好久没用c了)
可以改成 scanf("%c\n",&a); 试试
【 在 abc0 (abc0) 的大作中提到: 】
: int num = 0;
: while(1)
: {
: ...................
fflush(stdin);?
【 在 abc0 (abc0) 的大作中提到: 】
: int num = 0;
: while(1)
: {
: ...................
这个原理很简单
你在输入的时候: 按了一个 字母键 + 回车键
但是在系统的输入缓冲区中,回车也是一个字符! 因此 while(1) 执行了2次。
解决的办法: 输入后 清空缓冲区~
【 在 abc0 的大作中提到: 】
: int num = 0;
: while(1)
: {
: ...................
原因出在你的回车键,你再加个getchar()就好了