为什么C中的while循环不起作用?

时间:2018-02-17 14:40:51

标签: c

忽略负数在这里不起作用的事实,为什么正整数会产生无限循环?我尝试了很多组合,就像a = 20和b = 4一样简单,但是每一个组合都会创建一个无限循环。我做错了什么或者没有看到这里?

Automatic-Module-Name

3 个答案:

答案 0 :(得分:1)

不是给定输入的无限循环: -

事情是你在\n中使用scanf作为结果,除非你输入一些非空白字符 - 它等待它。

'\n'做了什么?

从标准解释为什么部分 - C11N1570§7.21.6.25

  

由白色空格字符组成的指令通过读取第一个非空白字符(仍未读取)的输入来执行,或者直到不再能读取任何字符为止。该指令永远不会失败。

如何提供输入?

如果你这样做会有效: -

>>> 20  4 Enter
<Somenonwhitespace> Enter

更好的解决方案:

更好的建议是使用

scanf("%d%d", &a, &b);

您无需像操作那样指定空格 - %d指令会跳过空格字符。

代码明智

if(scanf("%d%d", &a, &b)!=2){
    fprintf(stderr,"Error in input\n");
    exit(EXIT_FAILURE);
}

答案 1 :(得分:1)

如果您要在调试器中执行代码,您会发现甚至从未输入while循环。这不是无限循环的问题。相反,scanf()永远不会返回。

变化:

scanf("%d %d\n", &a, &b);

scanf("%d %d", &a, &b);

答案 2 :(得分:0)

scanf("%d %d\n", &a, &b);行应为scanf("%d %d", &a, &b);\n