【问题标题】:A question about break statement in c programming关于c编程中break语句的问题
【发布时间】:2022-01-22 07:31:27
【问题描述】:

我写了这个循环来添加数字,如果输入的数字小于零,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);
}

【问题讨论】:

    标签: c loops break


    【解决方案1】:

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

    #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 是否返回您期望的成功转换次数(在本例中为一次),以处理用户输入无效输入的事件。

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

    【讨论】:

    • 感谢您回答 Ia ma 初学者 我复制了您的代码并在 break 和 rslt += num 后添加了 rslt =0 并输入了 10 和 10 和 -2 结果变为 0 这就是为什么我认为break 语句跳过所有内容,但如果它就在它之后,它只跳过一个操作,你能澄清一下吗
    • @UnderScore rslt = 0 将在每次迭代中将整个总和重置为 0rslt += num;rslt = rslt + num 相同。 break 立即终止整个 while 循环。如果您想跳过当前迭代的其余部分,并移动到下一个迭代,您可以使用 continue 关键字。
    • 是的,非常感谢你跟上我的步伐,但是 break 在评估操作后终止循环是对的
    • @UnderScore break 终止循环立即 - 块中不再执行代码。在while (1) { puts("Hello"); break; puts(" world"); } 中,只会打印Hello
    • 非常感谢您的帮助,如果我有其他问题我会再问谢谢
    猜你喜欢
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2010-12-31
    • 2013-11-17
    • 2010-12-09
    • 1970-01-01
    相关资源
    最近更新 更多