请教一个scanf问题

sws_martian 2009-04-14 04:03:48
for (int i=0; i<10; i++)
{
printf("%d\n",i);
scanf("%c",&a);
}
想控制输入10个字符,为什么循环两次才运行一次scanf()?
...全文
248 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
hylove9494 2009-04-15
  • 打赏
  • 举报
回复
顶8楼
ustbleetom 2009-04-15
  • 打赏
  • 举报
回复
a=getch();
就行了吧~~~getch()不从缓冲读,但是也不读回车了...
changhe325 2009-04-15
  • 打赏
  • 举报
回复
都明白了还不结贴……
guocai_yao 2009-04-15
  • 打赏
  • 举报
回复
这个问题我也碰到过
hurricane880 2009-04-15
  • 打赏
  • 举报
回复
输入缓冲区问题
wqzwt23 2009-04-14
  • 打赏
  • 举报
回复
while(getchar()!='\n'); //这个就行
donle1000 2009-04-14
  • 打赏
  • 举报
回复
fflush(stdin)没有可移植性
可以这样scanf("%c%*c" , &a);
干桔梗 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lbh2001 的回复:]
前面输入的换行符也被当做输入了
for (int i=0; i <10; i++)
{
printf("%d\n",i);
fflush(stdin);
scanf("%c",&a);
}
[/Quote]

fflush(stdin) 在C 标准中的行为是未定义.虽然 VC 中可以这么用, 不保证编译器下都能得到正确的行为.
xmuyong 2009-04-14
  • 打赏
  • 举报
回复
有一个回车
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 gchk125 的回复:]
scanf("%c\n",&a) 中不能加 \n 的吧~~~
[/Quote]

可以.

但如3楼所说,这么做有问题.执行的结果与预期不相同
sws_martian 2009-04-14
  • 打赏
  • 举报
回复
多谢各位,明白了!
cg05568256068 2009-04-14
  • 打赏
  • 举报
回复
8楼的正确
liliangbao 2009-04-14
  • 打赏
  • 举报
回复
在第一次执行scanf的时候,你输入一个字符,按一下回车。
for (int i=0; i <10; i++) 
{
printf("%d\n",i);
fflush(stdin);
scanf("%c",&a);
//或者加一句getchar();
}
  • 打赏
  • 举报
回复

for (int i=0; i <10; i++)
{
printf("%d\n",i);
fflush(stdin); //这样保证你每次读取缓冲区的正确性
scanf("%c",&a);
}
gchk125 2009-04-14
  • 打赏
  • 举报
回复
scanf("%c\n",&a) 中不能加 \n 的吧~~~
lbh2001 2009-04-14
  • 打赏
  • 举报
回复
scanf("%c\n",&a)会使输入遇到非空白符才返回
好好想想^_^
lbh2001 2009-04-14
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ryuk33 的回复:]
在第一次执行scanf的时候,你输入一个字符,按一下回车。

于是,输入缓存区中,有了两个字符: 一个是你输入的,一个是换行符。

而此时,scanf("%c")只取走了第一个字符。

当第二次运行scanf的时候,它发现,缓存区中,还有一个“回车”,于是,它就直接拿来用了。


修改方法:
scanf("%c",&a) ---> scanf("%c\n",&a)
[/Quote]
前面是对的


修改方法:
scanf("%c",&a) ---> scanf("%c\n",&a)
是错的
yangch_nhcmo 2009-04-14
  • 打赏
  • 举报
回复
while(getchar()!= '\n'); //加入这行清除缓冲区中的回车符
ryuk33 2009-04-14
  • 打赏
  • 举报
回复
在第一次执行scanf的时候,你输入一个字符,按一下回车。

于是,输入缓存区中,有了两个字符: 一个是你输入的,一个是换行符。

而此时,scanf("%c")只取走了第一个字符。

当第二次运行scanf的时候,它发现,缓存区中,还有一个“回车”,于是,它就直接拿来用了。



修改方法:
scanf("%c",&a) ---> scanf("%c\n",&a)
lbh2001 2009-04-14
  • 打赏
  • 举报
回复
前面输入的换行符也被当做输入了
for (int i=0; i <10; i++)
{
printf("%d\n",i);
fflush(stdin);
scanf("%c",&a);
}
加载更多回复(1)

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧