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

问题描述 投票:-2回答:3
while(condition);{ 
    statement;
}

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

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

c++ while-loop syntax
3个回答
6
投票

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

while(condition)
  ;

{ 
    statement;
}

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

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


4
投票

while循环的定义是

while(condition) statement;

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

当你写的东西像

while (something)
{
    //more stuff
    //even more stuff
    //and something else
}

整个{}区块被视为单一陈述。


1
投票

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

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

在迭代语句中,只有do语句以;结尾。其他迭代语句不以;结尾。这意味着无论你在;for迭代语句中看到的while实际上都属于循环体中的“嵌套”语句。

在你的情况下

while (condition);

只是一个while循环,其身体仅仅是;。这个孤独的;并不直接属于while声明。这个孤独的;实际上属于一个空语句,它构成了你的循环体。换句话说,你的周期被解释为

while (condition) 
  /* Empty statement */;

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

开始括号和代码的其余部分被视为独立的复合语句,与循环无关。

© www.soinside.com 2019 - 2024. All rights reserved.