如果你必须在if语句中添加中断,为什么我们需要在while操作中烦恼?

时间:2016-03-26 03:34:44

标签: c if-statement do-while

这只是一个普遍的问题。

我最初写的是

    do
    {
        scanf("%i", &Carselect);
        if (Carselect == 1)
        {
            mass = 1100;
            velomax = 200;
        }
        else if (Carselect == 2)
        {
            mass = 1888;
            velomax = 415
        }
        else if (Carselect == 3)
        {
            mass = 18000;
            velomax = 129;
        }
        else
        {
        printf("Error in input. Please enter 1, 2 or 3.\n");
        }
    }
    while (Carselect != 1 || Carselect != 2 || Carselect != 3);

我陷入了困境。我在有效条件的陈述中加入了休息,这使我能够离开,就像这样

    do
    {
        scanf("%i", &Carselect);
        if (Carselect == 1)
        {
            mass = 1100;
            velomax = 200;
            break;
        }
        else if (Carselect == 2)
        {
            mass = 1888;
            velomax = 415;
            break;
        }
        else if (Carselect == 3)
        {
            mass = 18000;
            velomax = 129;
            break;
        }
        else
        {
        printf("Error in input. Please enter 1, 2 or 3.\n");
        }
    }
    while (Carselect != 1 || Carselect != 2 || Carselect != 3);

但我认为while的条件是重复条件,所以一旦Carselect等于1,2或3,它就会退出循环。如果你必须在if语句中放置中断,为什么我们需要在while操作中烦恼?

在机器级别或其他方面,有什么需要这个看似微不足道的逻辑?

2 个答案:

答案 0 :(得分:6)

编辑(问题标题已更改):

while / do-while循环中的检查条件是主要检查以确定程序是否要保持或退出while / do-while循环而不是break语句。

如果出现以下情况,通常会使用break语句:

  1. 你想要在之前阻止执行阻止
  2. 中的每个语句>
  3. 在您循环整个循环迭代之前达到某些异常终止条件
  4. 您创建无限循环并捕获错误,这使您无法继续循环或
  5. 其他一些我可能不知道的案例......
  6. 基本上,只要程序遵循(缺少更好的术语)“标准/主要”路径,break-statement通常用于 来终止while / do-while块在循环块中。

    相反,while / do-while循环中的条件 用于在程序跟随“标准/主要时终止循环“循环块中的路径。

    <强>原始

    您应该将不等式检查(!=)更改为NOT等式检查(==)。

    while (!(Carselect == 1 || Carselect == 2 || Carselect == 3));
    

    这是因为你真正想要的是循环继续只要

      

    Carselect不是(1或2或3)

    或者,您可以将或运算符(||)更改为运算符(&&),这会产生相同的逻辑:

    while (Carselect != 1 && Carselect != 2 && Carselect != 3);
    
      

    Carselect不是1而不是2而不是3

答案 1 :(得分:0)

在C 中断会将您带到包含块的紧跟在}}之后的语句,并且继续会将您带到紧跟在包含块之后的语句。两者在长块中都很有用,例如,如果出现错误情况,或者检测到更简单的输入,并且不需要完整块的所有处理,但是您希望继续并获得下一个输入。