在c ++中执行while()并中断;

时间:2017-11-06 12:32:44

标签: c++

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()循环,但这是常见的吗?

3 个答案:

答案 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]

范围内的所有x值

可以重写第二个代码片段,如本演示程序中所示

#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);

现在你应该能够弄清楚它是如何工作的。但是这段代码仍然很奇怪。