while(condition);{
statement;
}
while循环的开括号之前的分号不应该在那里。我遇到的问题是程序在运行时遇到while循环的原因。据我所知,分号是一个终止标点符号,让编译器知道它已经到了语句的末尾。既然它没有读取while循环的开括号,那么它不应该移动到下一行并执行动作?如果您运行调试器并逐步移动,它将停止在while语句处移动,并且不会更进一步。我只是在寻找一些有关为何情况的见解。如果是这样的情况,while必须后跟一个条件,然后是开括号,为什么在分号之间进行编译?不应该抛出某种错误吗?
使用的IDE是Dev c ++。我不确定这是否是IDE特定的问题,因为我没有在其他IDE中对此进行测试。
答案 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 */;
因此,在您的情况下,循环只是无限期地执行该空语句。
开头括号和其余代码被视为一个独立的复合语句,与你的循环无关。