当我偶然发现这段代码时,我正在复习我为算法课所做的一些练习,但它并没有像我想象的那样工作。

因此,练习如下:编写一个程序,要求输入一个正整数,然后打印其 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/

10-11 23:02
查看更多