我的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