【发布时间】:2018-07-20 20:14:25
【问题描述】:
当我偶然发现这段代码时,我正在复习我为算法课所做的一些练习,但它并没有像我想象的那样工作。
所以练习如下:编写一个程序,请求一个正整数,然后打印它的双精度数,除非这个数字是负数。
代码如下:
int main(void) {
int n = 1;
while (n >= 0) {
printf("Veuillez introduire un nombre entier positif: ");
if (!(scanf("%i", &n)) || n < 0)
break;
printf("Le double de %i est de: %i\n", n, (2 * n));
}
}
足够简单。
问题是,如果我尝试输入一个字符、一个负数……如预期的那样,程序会立即停止,但如果我输入“-0.1”,它首先会打印 0 的双倍,即 0,然后再次运行循环到 if 语句。
如果我只输入 0 甚至 -0,它不会继续运行(因为 0 不是负数,所以应该这样做)。
这是输出:
Veuillez introduire un nombre entier positif: -0
Le double de 0 est de: 0
Veuillez introduire un nombre entier positif: 1
Le double de 1 est de: 2
Veuillez introduire un nombre entier positif: -0.1
Le double de 0 est de: 0
Veuillez introduire un nombre entier positif:
它停在那里。
我只是无法理解这一点。对不起,如果这是微不足道的。
感谢您的宝贵时间。
注意:这是我的第一篇文章,我还没有在这里找到答案,所以如果你找到它或者如果你有反馈,请随时发布它,我们将不胜感激。
编辑:用文本交换输出屏幕截图
【问题讨论】:
-
-0 不小于 0。由于您向 scanf() 询问整数,它看到 0,然后是 '.',然后停止,因为整数没有 '.'在他们里面。
-
您正在为 int 输入浮点数。
-
他输入了一个 int 就好了。后面还碰巧输入了一些乱码“.1”。
-
好吧,我想我说错了。我希望它以-0.1 停止。我不明白的是它再次遍历循环直到 if 语句。如果输入不正确,它不会这样做。所以,如果我明白你的意思是 scanf 在再次调用它之前没有返回 EOF?
-
@lemonChief 是的,没错。见Barmar's answer。
标签: c loops while-loop int scanf