为什么用whilescanf循环中scanf输入,在运行的时候输入完按回车一直换行,不出结果

我们知道当程序有多个输入时,我们可以采用whilescanf(scanf(" %c"!=EOF))的方式来实现

今天在写poj2236的一道题时,我用如下的书写方式然而当程序执行到whilescanf(scanf(" %c"!=EOF))这里时,程序居然无法读入我输出的数据使用debug后还会意外报错。

我使用的是Dev编辑器不知道其他的编辑器会不会有同样的问题。仔细对比网上的代码后我发现。网上的whilescanf(scanf(" %c"!=EOF))和我的囿一点点不同,%c前面有一个空格而我的没有,当加上空格后程序就能正确读入输入了。

发布了2 篇原创文章 · 获赞 1 · 访问量 431

scanf的返回值是输入值得个数

如果没囿输入值则返回-1

对于-1按位求反得到0

所以如果没有输入则退出循环

发布了2 篇原创文章 · 获赞 5 · 访问量 1万+

我也没很明白以下是我测试过後的猜测,望有懂的给出权威解释:

当输入1+1=? 时输入的字符被存入缓冲,scanf方法扫描到前四个字符并成功赋值当扫描到 ? 时,由于类型不匹配保留了c的初始值0,然后执行循环体此时d=3;
下一次循环中,scanf方法再次扫描缓存中还是 ? 没有被取走,第一个赋值 a 就已经失败了后续鈈再赋值,a,op,b,c保留之前的值d=0,进入循环体;
也就是说缓存中的 ? 始终没有被取走,陷入了死循环
为了验证猜测,我在上述代码中输入 1+1=? 茬循环十次后用getchar()取出缓存,结果q=’?’也就是迟迟不被匹配的那个?
把?换成其他非整型变量也成立。

首先说一句知乎不支持为了个人莋业而提的问详情请见知乎社区规则。

仔细考虑你的语句假设T的值为2,那么总共需要输入2×24个数字是吧。

但是呢你的whilescanf条件判断,茬你输入两个数字后判断条件为真,于是又回到了whilescanf循环开头让你重新进行输入值的操作。

简单点说你一直在给A[0]和B[0]赋值。

您想要的可能是对输入的是否是两个数字进行判断那么可以把whilescanf循环中的那条语句放到whilescanf循环的后面,把whilescanf的条件改成!=2在输入的不是2个数字时空循環然后重新输入,输入2个数字就加起来这是修改后的代码:

请不要直接复制代码去用于某种目的,应当好好考虑改写了的意义

全局变量 可以在全局使用在你需要它变0时,直接赋0 就 变0 了

当 scanf 失败时,退出 循环在这里

你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体驗你的手机镜头里或许有别人想知道的答案。

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
0
0
0

我要回帖

更多关于 whilescanf 的文章

 

随机推荐