我的do while循环只执行一次[关闭]

Posted

技术标签:

【中文标题】我的do while循环只执行一次[关闭]【英文标题】:My do while loop is only executing once [closed] 【发布时间】:2014-01-27 08:55:59 【问题描述】:

我已经在c中做了一个示例代码。

do



 switch(i)
 

 case 1:
 
   cout<< "1\n";
   break;

 
 case 2:
 
      cout<< "1\n";
      break;
  
  case 3:
  
    continue;
  


 
 while (0);

在此代码中,如果 i 的值为 3,那么我想重新启动 do while 循环,这将导致无限循环。但不幸的是循环没有被再次执行。那会是什么原因呢。? 我在Visual Studio中检查了相同代码的汇编代码,发现在switch -case里面的continue语句的汇编中没有JMP语句。

【问题讨论】:

continue 跳过循环体的其余部分并重新测试条件。你的是硬编码的false(在将0 转换为bool 之后)。考虑到其他情况 break 无论如何 - 离开循环,您可以使用 while (true) 代替(假设您的真实代码大不相同)。 这个问题似乎离题了,因为它要么是关于错字,要么是 OP 缺少对该语言非常基本的部分的了解。 【参考方案1】:

while (0) 表示它将掉出循环的底部。即使您有continue,条件也会重新评估

【讨论】:

我在Visual Studio中检查了相同代码的汇编代码,发现在switch -case里面的continue语句的汇编中没有JMP语句。 @kernel 如果是最后一种情况,它不需要跳转到任何地方。 所有 continue 所做的只是跳转到下一条语句,优化器可能正在将它从生成的汇编代码中删除,因为它不需要。【参考方案2】:

当您在 do-while 循环内执行 continue 时,它会跳到底部的评估处,在您的情况下这始终是错误的。

【讨论】:

【参考方案3】:

其他答案正在解释 continue,但从您的 cmets 看来,您似乎了解它是如何工作的。

如果 i 的值为 3,那么我想重新启动 do while 循环,这将导致无限循环

代码如您所描述的那样运行 - 它正在跳转到 i==3 上的“while”条件。唯一的区别是,如果你想要一个无限循环,你需要while(1) 而不是while(0)

【讨论】:

以上是关于我的do while循环只执行一次[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

各位懂软件,的分别使用while和do…whil循环输出1—10之间的所有数字,包括1和10这题咋做

java入门---循环结构 - for, while 及 do...while&break&continue

WHILE 和 DO-WHILE 循环未执行并卡在输出[关闭]

do{} while 只执行一次无意义?你可能真的没理解

do{} while 只执行一次无意义?你可能真的没理解

PHP循环