求解释

bingolb 2012-04-17 10:11:54
#include <stdio.h>
int main(void)
{
int in;
int status;
printf("input:\n");
status=scanf("%d",&in);
while (status==1)
{
printf("next\n");
status=scanf("%d",&in);
}
return 0;
}


程序直到输入非数字时结束,这个没问题
当把while(status==1)改成while(status!=1)时,为什么输入非数字时就一直打印next,下面那句status=scanf("%d",&in)
好像没有执行了
难道遇到scanf函数程序不应该等待我输入吗,求高人解答
...全文
102 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bingolb 2012-04-17
  • 打赏
  • 举报
回复
大概明白了,我再研究研究,谢谢
luciferisnotsatan 2012-04-17
  • 打赏
  • 举报
回复
比如
scanf("%d",&in);
scanf("%d",&in);
scanf("%d",&in);
如果输入是:12 23 34回车
这样的话,一次就完成了这3个scanf的输入。缓存里12 23 34,然后3个scanf都可以读到东西。


如果是 a 12 34。那么第一个scanf遇到a,匹配不上,此时第一个scanf不会吃掉a,a还是留在缓存中。然后第二个scanf继续做同样的是,发现a比配不上,失败。然后第3个scanf
muyi66 2012-04-17
  • 打赏
  • 举报
回复
当你输入了一个非数字字符时,scanf("%d",&in) 发现缓冲中当前字符为非数字字符,于是停止读取,返回0。然后循环语句开始下一次循环,但scanf仍旧不能接受这个字符,程序陷入死循环。
luciferisnotsatan 2012-04-17
  • 打赏
  • 举报
回复
printf("next\n");
fflush(stdin);
status=scanf("%d",&in);

在scanf前fflush下就行了
bingolb 2012-04-17
  • 打赏
  • 举报
回复
似乎有点明白,但还是不太懂
在while(status==1)时
输入数字的时候缓存里应该也会有这个数字吧,但下一个scanf还是会等待输入呀,为什么它不继续在缓存里读了
luciferisnotsatan 2012-04-17
  • 打赏
  • 举报
回复
那个非数字还在缓存里,并没有被第一个scanf读取。然后之后的scanf继续在缓存里读,又是不对。于是就死循环了
bingolb 2012-04-17
  • 打赏
  • 举报
回复
什么意思,能说具体点吗,
第一个scanf失败,导致下面的scanf都不执行?
luciferisnotsatan 2012-04-17
  • 打赏
  • 举报
回复
应为scanf失败了。

69,371

社区成员

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

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