在 for 中插入一个 while 循环。认为这是一个脑筋急转弯[关闭]

Posted

技术标签:

【中文标题】在 for 中插入一个 while 循环。认为这是一个脑筋急转弯[关闭]【英文标题】:Inserting a while loop inside a for. Consider this a brain teaser [closed] 【发布时间】:2013-12-15 12:45:09 【问题描述】:

我最近从我的一些朋友那里听说他设法在 for 中插入了一个 while 循环。我所说的“内部”是指字面意义上的内部。我在 C/C++ 中尝试过。像这样的:

for( exp1; while(); exp2)

exp3;

for(exp1; exp2; while())

exp3;

两种方法我都试过了,但我似乎没能成功。有没有其他人试过这个?有人可以给我一个有效的例子吗?

【问题讨论】:

我认为你的朋友在撒谎,或者你只是听错了他/她。 he managed to insert a while loop inside a for 为什么不问问自己怎么做? 我无法引用标准的确切片段,但我认为敌人需要表达式,并且控制结构(如while)将不起作用。但最重要的是,我会问 - 你需要它做什么? 不明白为什么这么多反对票,这是一个完全合理的问题。 @danp:我没有投反对票,但我想他们是因为这个问题本质上是“我听说过一个关于这个不切实际的事情的轶事。我该怎么做?”。加上语言标签垃圾邮件。 【参考方案1】:

这两个程序在 C 中无效。

for C 中的循环子句必须是表达式(或第一个子句的声明)。不允许使用语句,例如 while 语句。

【讨论】:

【参考方案2】:
for( int a = 17; 1 != [&]()while(!(a%2))a/=2;;return a;(); a=a*3+1)
  std::cout <<a<<"\n";

while 内的for

【讨论】:

这是 Collat​​z 的 C++11 实现吗? @iwillnotexistidonotexist 是的。然而,它只打印出奇怪的步骤。我一直在寻找一种不平凡的方式来使用while,自然想回答两个人说做不到的问题。 我以前从未在野外见过 C++11 lambda 表达式,这是一个很好的例子。 +1。但我偷偷怀疑 OP 看到了一个带有 while 的 GCC 语句表达式。 for 中的语句表达式类似于for(a = 17; (while((a%2) &amp; 1 == 0)a/=2; a;) != 1 ; a=3*a+1);。注意 ( /*expr*/ ) 语法的特征。【参考方案3】:

一般形式的for语句(不包括基于范围的for)实际上由三个表达式组成:init表达式、条件表达式和另外一个表达式。 while 语句不是表达式语句,因此不能在表达式中使用。

【讨论】:

【参考方案4】:

我同意其他人的观点,即您不能将这样的 while 语句插入到 C 中的 for 循环中。据我所知,for 循环的语法是这样的:

for(initializer; condition; increment) 
...

教科书上说只能接受从句和表达式。

while 语句创建一个结构化循环,只要在每次迭代开始时while 中指定的条件为真,该循环就会执行。所以,我认为while 条件是针对while 语句本身,而不是针对for 循环。干杯。

【讨论】:

以上是关于在 for 中插入一个 while 循环。认为这是一个脑筋急转弯[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

R中的并行while循环

在实现无限循环时,使用 while(1) 与 for(;;) 与 goto (在 C 中)有区别吗?

C;如果我在 while 循环内的 for 循环中放置一个 break

将While循环更改为for循环

什么叫“写一个循环(for或者while)读入五个浮点数?”

MySQL 用 While 循环插入