Vir*_*co_ 3 c int loops scanf while-loop
当我偶然发现这段代码时,我正在审查我为算法类做的一些练习,但它没有像我想象的那样工作.
所以练习如下:写一个要求正整数的程序然后打印它的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));
}
}
Run Code Online (Sandbox Code Playgroud)
很简单.
事情是,如果我尝试输入一个字符,一个负数,...正如预期的那样,程序会立即停止但是如果我输入"-0.1"它首先输出0的两倍,即0,然后再次运行循环到if声明.
如果我只输入0或甚至-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:
Run Code Online (Sandbox Code Playgroud)
它停在那里.
我无法绕过这个.对不起,如果这是微不足道的.
感谢您的时间.
注意:这是我的第一篇文章,我在这里找不到答案,所以如果你找到它或者你有反馈意见随时发布,我们将不胜感激.
编辑:用文本交换输出的屏幕截图
使用格式%i,scanf()读取整数.如果键入-0.1,则整数为-0.这不小于0,所以循环继续.
下次循环时,它会尝试从中读取一个整数.1.由于这不是整数,因此扫描失败并scanf()返回0.这导致!scanf("%i", &n)为真,因此break;执行并且循环停止.