while(condition);{
statement;
}
while循环的开括号之前的分号不应该在那里。我遇到的问题是程序在运行时遇到while循环的原因。据我所知,分号是一个终止标点符号,让编译器知道它已经到了语句的末尾。既然它没有读取while循环的开括号,那么它不应该移动到下一行并执行动作?如果您运行调试器并逐步移动,它将停止在while语句处移动,并且不会更进一步。我只是在寻找一些有关为何情况的见解。如果是这样的情况,while必须后跟一个条件,然后是开括号,为什么在分号之间进行编译?不应该抛出某种错误吗?
正在使用的IDE是Dev c ++。我不确定这是否是IDE特定问题,因为我没有在其他IDE中测试过这个问题。
您可以使用更好的格式重写代码,这可能会使问题更清晰:
while(condition)
;
{
statement;
}
如果condition
为真(即非0),则迭代无限循环。
如果condition
为假(即0),则执行前进到以下语句。
while循环的定义是
while(condition) statement;
所以当你使用while循环时,它只会执行statement
。由于您的语句为空(while(condition);
),因此不执行任何操作,循环再次循环。这将永远持续下去。
当你写的东西像
while (something)
{
//more stuff
//even more stuff
//and something else
}
整个{}
区块被视为单一陈述。
据我所知,半冒号是一个终止标点符号,让编译器知道它已经到了语句的末尾。
;
在C ++语法中的作用并不是那么简单和直接。实际上,C ++中的许多(如果不是大多数)语句最后都没有;
。编译器根本不需要检测语句的结尾。
在迭代语句中,只有do
语句以;
结尾。其他迭代语句不以;
结尾。这意味着无论你在;
或for
迭代语句中看到的while
实际上都属于循环体中的“嵌套”语句。
在你的情况下
while (condition);
只是一个while
循环,其身体仅仅是;
。这个孤独的;
并不直接属于while
声明。这个孤独的;
实际上属于一个空语句,它构成了你的循环体。换句话说,你的周期被解释为
while (condition)
/* Empty statement */;
因此,在您的情况下,循环只是无限期地执行该空语句。
开始括号和代码的其余部分被视为独立的复合语句,与循环无关。