c - 在 C 中不中断地退出 while 循环

标签 c while-loop

我有以下代码:

void takeOrder(void)
{
int stop = 0;
while(stop != 1)
{
    printf("What is your order?\n");
    printf("%c - fruitShake\n%c - milkShake\n", FRUIT_SHAKE_CHOICE, MILK_SHAKE_CHOICE); 
    scanf("%c", &typeChoice); 
    if(typeChoice != FRUIT_SHAKE_CHOICE || typeChoice != MILK_SHAKE_CHOICE)
    {
        printf("***Error! Wrong type***");
        stop = 1;
    }
    //more code below
}

我试图用标志“停止”退出 while 循环,但它不起作用,它只是继续执行下面的其余代码。 有什么方法可以在不使用 break 的情况下使用标志退出这个 while 循环吗?

最佳答案

您可以通过多种方式实现,所有这些方式都比使用 break 差很多:

  • 您可以添加 else 并增加 //more code 部分的代码嵌套,或者
  • 您可以设置变量并使用 continue 而不是 break 来混淆您的读者,或者
  • 您可以添加标签并使用goto 来激怒您的同事

最好的方法是使用 break,并完全删除 stop 变量,将其替换为“永远”循环:

for (;;) {
    ...
    if (condition) {
        break;
    }
    ...
}

在三个内置循环都不适合你的情况下,这种结构是惯用的,即当决定中断或继续是在循环的中间而不是循环的顶部时(如在 forwhile 循环中)或循环底部(如在 do/while 循环中) .

注意:设置变量时代码没有结束循环的原因是没有连续检查循环条件。相反,它会在每次迭代开始前检查一次。之后,条件可能会在循环体内的任何一点变得无效。

关于c - 在 C 中不中断地退出 while 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47596596/

相关文章:

php - while 语句跳过第一行

c 变量作用域

c - C中printk的atomic_long_t的打印格式是什么

具有非阻塞管道 IO 的 C fork/exec

c - 使用 "while"检查是否有空行C

python - while 循环内的 try except Python 2.7

javascript - while 循环中的 setTimeOut

c - 双链表中的访问冲突错误

c - 用于在 C 中构造 802.11 帧而无需管理控制字段的 API

java - 终端中的 "Incomparable types: java.lang.String and int"