在do ... while()语句中为单个'do'使用多个连续的while()

时间:2017-06-22 14:08:48

标签: c do-while

我想知道'while'语句的执行顺序以及如何到达以下代码片段的输出:

SNIPPET 1:

int main()
{ 
    int a;
    a=10;
    do
    while(a++<10);
    while(a++<=11);
    printf("%d",a);
} 

输出 14

SNIPPET 2:

int main()
{ 
    int a;
    a=10;
    do
    while(a++<10);
    while(a++<=11);
    while(a++<=12);
    printf("%d",a);
} 

输出 15

3 个答案:

答案 0 :(得分:4)

摘录1:

do
while(a++<10);
while(a++<=11);

可以改写为:

do {
    while(a++<10);
} while(a++<=11);

最初a10

  1. a = 10,条件(a++<10) = false,现在a = 11

  2. a = 11,条件(a++<=11) = true,现在a = 12

  3. a = 12,条件(a++<10) = false,现在a = 13

  4. a = 13,条件(a++<=11) = false,现在a = 14

  5. 因此打印14

    小部件2可以重写为

    do {
        while(a++<10);
    } while(a++<=11);
    // a becomes 14 now
    while(a++<=12);
    

    此处的上半身操作部分类似于代码段1,因此{do} while循环后a将为14

    在此条件之后,(a++<=12)falsea将增加至15

    因此打印15

    注意:使用大括号并保持代码清洁&amp;容易理解:)

答案 1 :(得分:2)

来自documentation

  

attr (可选)执行 声明 表达式);

如您所见,语句不是可选的,您无法编写do while(ex); - 这是一个错误。带有空语句的最短形式是这样的:do ; while(ex);

知道这一点,您可以发现do while循环中的语句实际上是单个while,而不是空语句。

答案 2 :(得分:-1)

由于您不使用括号,因此您的代码不清楚各种执行/执行时间的执行情况。

比较以下片段:

#include <stdio.h>
int main()
{ 
    int a;
    a=10;
    do { } while(a++<10);
    while(a++<=11) {}
    printf("%d",a);
} 
/* Output: 13 */

#include <stdio.h>
int main()
{ 
    int a;
    a=10;
    do { while(a++<10); } while(a++<=11);
    printf("%d",a);
} 
/* Output: 14 */

所以:如果有疑问,请使用括号。

相关问题