如果你必须在if语句中放置中断,为什么我们需要在while操作中打扰条件?

Eur*_* KN 2 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);
Run Code Online (Sandbox Code Playgroud)

我陷入了困境.我在有效条件的陈述中放了休息,这让我可以离开,就像这样

    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);
Run Code Online (Sandbox Code Playgroud)

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

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

Ian*_*Ian 6

编辑(随着问题标题的更改):

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

break语句通常用于:

  1. 你想要执行块中的每个语句之前离开while/do-while块
  2. 在循环完整循环迭代之前达到某些异常终止条件
  3. 您创建一个无限循环,并捕获一个错误,使您无法继续循环或
  4. 其他一些我可能不知道的案例......

本质上,只要程序跟随(缺少更好的术语)循环块中的"标准/主"路径,break-statement 通常用于终止while/do-while 块.

相反,条件在while/do-while循环用于终止循环程序时遵循在循环块"标准/主"路径.

原版的:

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

while (!(Carselect == 1 || Carselect == 2 || Carselect == 3));
Run Code Online (Sandbox Code Playgroud)

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

Carselect不是(1或2或3)

或者,您可以将or运算符(||)更改为和operator(&&),从而产生相同的逻辑:

while (Carselect != 1 && Carselect != 2 && Carselect != 3);
Run Code Online (Sandbox Code Playgroud)

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