在一个while循环中打开括号之前放置半冒号

时间:2016-10-05 16:14:09

标签: c++ while-loop syntax

while(condition);{ 
    statement;
}

while循环的开括号之前的分号不应该在那里。我遇到的问题是程序在运行时遇到while循环的原因。据我所知,分号是一个终止标点符号,让编译器知道它已经到了语句的末尾。既然它没有读取while循环的开括号,那么它不应该移动到下一行并执行动作?如果您运行调试器并逐步移动,它将停止在while语句处移动,并且不会更进一步。我只是在寻找一些有关为何情况的见解。如果是这样的情况,while必须后跟一个条件,然后是开括号,为什么在分号之间进行编译?不应该抛出某种错误吗?

使用的IDE是Dev c ++。我不确定这是否是IDE特定的问题,因为我没有在其他IDE中对此进行测试。

3 个答案:

答案 0 :(得分:6)

您可以使用更好的格式重写代码,这可能会让问题更加清晰:

while(condition)
  ;

{ 
    statement;
}

如果condition为真(即非0),则迭代无限循环。

如果condition为假(即0),则执行前进到以下语句。

答案 1 :(得分:4)

while循环的定义是

while(condition) statement;

因此,当您使用while循环时,它只会执行statement。由于您的语句为空(while(condition);),因此不执行任何操作,循环再次循环。这将永远持续下去。

当你写

之类的东西时
while (something)
{
    //more stuff
    //even more stuff
    //and something else
}

整个{}块被视为单个语句。

答案 2 :(得分:1)

  

据我所知,半冒号是一个终止标点符号,让编译器知道它已经到了语句的末尾。

;在C ++语法中的作用并不是那么过分简单明了。实际上,C ++中的许多(如果不是大多数)语句最后都没有;。编译器根本不需要检测语句的结尾。

在迭代语句中,只有do语句以;结尾。其他迭代语句不以;结尾。这意味着您在;for迭代语句中看到的while实际上属于"嵌套"循环体中的陈述。

在你的情况下

while (condition);

只是一个while循环,其正文仅由;组成。此单独的;不直接属于while语句。这个孤独的;实际上属于一个空语句,它构成了循环体。换句话说,您的周期被解释为

while (condition) 
  /* Empty statement */;

因此,在您的情况下,循环只是无限期地执行该空语句。

开头括号和其余代码被视为一个独立的复合语句,与你的循环无关。