当我偶然发现这段代码时,我正在复习我为算法课所做的一些练习,但它并没有像我想象的那样工作。
因此,练习如下:编写一个程序,要求输入一个正整数,然后打印其 double 数,除非该数字为负数。
所以这里是代码:
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:
它停在那里。
我只是无法解决这个问题。对不起,如果这是微不足道的。
感谢您的时间。
注意:这是我的第一篇文章,我还没有在这里找到答案,所以如果你找到了它或者如果你有反馈,请随时发布它,我们将不胜感激。
编辑:用文本交换输出的屏幕截图
最佳答案
对于 %i
格式,scanf()
读取一个整数。如果您键入 -0.1
,则整数为 -0
。这不小于 0
,因此循环继续。
下一次循环时,它尝试从 .1
读取一个整数。由于这不是整数,因此扫描失败并且 scanf()
返回 0
。这导致 !scanf("%i", &n)
为真,因此 break;
被执行并且循环停止。
关于c - 为什么这个循环在用户输入 -0.1 时不会立即中断,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48716325/