while()循环在c ++中的运行方式究竟如何?我尝试了一些不同的,我想知道这是否是预期的行为:
第一个打印9
int y = 10;
while(--y>0){
printf("Y: %d \n", y);
break;
}
这个也打印9
int z = 10;
do{
z--;
printf("Z: %d \n", z);
break;
}while(z>0);
现在对于do while()循环,它一直打印到零并且不会提前中断
int x = 10;
do while (x--){
printf("X: %d \n", x);
break;
}while(x > 0);
最后一个在break语句中断开,只输出9:
int f = 10;
do if(f>5) while(f--){
printf("F: %d \n", f);
break;
}while(f>10);
我认为最后两个while()循环会有类似的行为,但他们不会这样做。我从来没有写过像前两个那样的while()循环,但这是常见的吗?
答案 0 :(得分:2)
让我们看一下代码的结构。示例3,为了清晰起见添加了空格:
int x = 10;
do // starts a do-while loop (1)
while (x--) // starts a while-loop (2) which is the body of the
// do-while loop (1)
{ // body of the inner while-loop (2) is a block
printf("X: %d \n", x);
break; // breaks the inner-most loop (2)
} // end of the body of the inner while-loop (2)
// since the outer do-while loop (1) does not have a
// block as body, the end of the inner loop (2) also
// ends the body of the outer do-while loop (1)
while(x > 0); // condition of the outer do-while loop (1)
同样,这是示例4的澄清结构:
int f = 10;
do
if(f>5)
while(f--)
{
printf("F: %d \n", f);
break;
}
while(f>10);
答案 1 :(得分:2)
为了使最后两个代码片段更清晰,让我们使用大括号重写它们。
第一个看起来就像是在示范程序中显示的
#include <stdio.h>
int main(void)
{
int x = 10;
do
{
while (x--)
{
printf("X: %d \n", x);
break;
}
} while(x > 0);
return 0;
}
所以有一个do-while语句和一个内部while语句。事实上,具有break语句的while语句可以用以下方式替换if语句
#include <stdio.h>
int main(void)
{
int x = 10;
do
{
if (x--)
{
printf("X: %d \n", x);
}
} while(x > 0);
return 0;
}
因此do-while语句输出[9, 0]
可以重写第二个代码片段,如本演示程序中所示
#include <stdio.h>
int main(void)
{
int f = 10;
do
{
if ( f > 5)
{
while(f--)
{
printf("F: %d \n", f);
break;
}
}
} while( f > 10 );
return 0;
}
它的输出是
F: 9
简历很简单:不要编写混淆代码。编写代码读者可以理解的代码。
答案 2 :(得分:1)
这是最后两个构造在用可读C编写后的外观:
int x = 10;
do
{
while (x--) {
printf("X: %d \n", x);
break;
}
}
while (x > 0);
int f = 10;
do
{
if (f > 5) {
while (f--) {
printf("F: %d \n", f);
break;
}
}
}
while (f>10);
现在你应该能够弄清楚它是如何工作的。但是这段代码仍然很奇怪。