忽略负数在这里不起作用的事实,为什么正整数会产生无限循环?我尝试了很多组合,就像a = 20和b = 4一样简单,但是每一个组合都会创建一个无限循环。我做错了什么或者没有看到这里?
Automatic-Module-Name
答案 0 :(得分:1)
事情是你在\n
中使用scanf
作为结果,除非你输入一些非空白字符 - 它等待它。
'\n'
做了什么?从标准解释为什么部分 - C11N1570§7.21.6.2¶5
由白色空格字符组成的指令通过读取第一个非空白字符(仍未读取)的输入来执行,或者直到不再能读取任何字符为止。该指令永远不会失败。
如果你这样做会有效: -
>>> 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
。