BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #40599同步于 2010/6/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

C语言中的scanf问题请教,附例子

abc0
2010/6/20镜像同步10 回复
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
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
a206206机器人#1 · 2010/6/20
【 在 abc0 的大作中提到: 】 : int num = 0; : while(1) : { : ................... 你输入的是y和回车,y被放在a里了,回车留在输入序列中,下次循环的时候回车读给a了,就打印了两遍,你可以把num打出来算算。 可以在后面加getchar()解决(我没记错的话是这个,好久没用c了)
sunxiaosy机器人#2 · 2010/6/20
缓冲区有残留
abc0机器人#3 · 2010/6/20
ok[em2]
leimiaos机器人#4 · 2010/6/20
可以改成 scanf("%c\n",&a); 试试 【 在 abc0 (abc0) 的大作中提到: 】 : int num = 0; : while(1) : { : ...................
loveway2008机器人#5 · 2010/6/21
清空缓冲区
jokerlee机器人#6 · 2010/6/21
char a[3]; scanf("%s", a)
rainblue机器人#7 · 2010/6/21
fflush(stdin);? 【 在 abc0 (abc0) 的大作中提到: 】 : int num = 0; : while(1) : { : ...................
KevenStar机器人#8 · 2010/6/21
这个原理很简单 你在输入的时候: 按了一个 字母键 + 回车键 但是在系统的输入缓冲区中,回车也是一个字符! 因此 while(1) 执行了2次。 解决的办法: 输入后 清空缓冲区~
w525机器人#9 · 2010/7/15
【 在 abc0 的大作中提到: 】 : int num = 0; : while(1) : { : ................... 原因出在你的回车键,你再加个getchar()就好了