关于c程序中break语句的一个问题

A question about break statement in c programming

我写了这个循环来添加数字,如果输入的数字小于零,则 break 退出循环,最后打印计算出的数字而不添加负数。但问题是即使我在添加之前写了 break 语句当我输入 15 和 15 和 -2 输出是 28 而不是 30 我找到了解决方法,我想知道的是为什么 谢谢。

#include <stdio.h>

void main()
{
    int j = 1, num = 0, rslt = 0;
    while (1) {
        if (num < 0) break;
        printf("enter a number : ");
        scanf("%d", &num);
        rslt = rslt + num;
    }
    printf("the resluts are %d\n", rslt);
}

目前,在将上一次迭代的输入添加到结果中之后,您正在有效地测试它。相反,在用户输入数字后立即检查数字,然后再执行任何计算。

#include <stdio.h>

int main(void)
{
    int num = 0, rslt = 0;

    while (1) {
        printf("enter a number : ");
        scanf("%d", &num);
        
        if (num < 0)
            break;
                               
        rslt += num;           
    }                          
                              
    printf("the results are %d\n", rslt);
}

您可能还想检查 scanf returns 您期望的 转换 成功次数(在本例中为一次),以处理用户输入无效输入的事件。

if (1 != scanf("%d", &num))
    break;