c - 如果你必须在 if 语句中放置 break,为什么我们需要在 while 操作中为条件操心?

标签 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 语句中放置 break,为什么我们需要为 while 操作中的条件烦恼?

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

最佳答案

编辑(因为问题的标题已更改):

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

break 语句通常在以下情况下使用:

  1. 您想在 执行 block 中的每个语句或
  2. 之前退出 while/do-while block
  3. 当在您遍历整个循环迭代之前达到某些异常终止条件时或
  4. 您创建了一个无限循环并捕获了一个错误,这使您无法继续循环或
  5. 其他一些我可能不知道的情况......

本质上,break 语句通常用于终止 while/do-while block ,只要程序遵循(因为缺少更好的术语)“标准/主要”路径 在循环 block 中。

相比之下,while/do-while 循环中的条件用于当程序遵循“standard/main”时终止循环"循环 block 中的路径。

原文:

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

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

这是因为你真正想要的是循环持续到

the Carselect is not (1 or 2 or 3)

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

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

the Carselect is not 1 and not 2 and not 3

关于c - 如果你必须在 if 语句中放置 break,为什么我们需要在 while 操作中为条件操心?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36231337/

相关文章:

c++ - 现代 C 和 C++ 中是否不推荐使用 f(void)?

JAVA .equalsIgnoreCase 不工作

c++ - 定期检查条件而不阻塞

即使 while 为真,Javascript do while 循环也不会继续

c - pthreads,我怎么知道进程内的另一个线程没有在等待?

C : timer inside while/loop + scanf?

将sqlite连接到C程序

javascript - 为什么这个基本的 if 语句不起作用? JavaScript

mysql - 如何在 MySQL 上的另一个 if 子句中创建一个 if 子句

c# - 在 C# 中执行 .. While 循环?