首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C语言编程中使用do/while时的奇怪输出

在C语言编程中使用do/while时的奇怪输出
EN

Stack Overflow用户
提问于 2020-11-30 15:28:28
回答 4查看 231关注 0票数 1

我正在努力理解这个程序的输出。如果我试图“翻译”代码,我认为应该是这样的:

  • 虽然"j“小于3-打印"Ha”(这个循环运行3次,因此它给出3“Ha”)
  • do/而-> j等于j-2,因此打印"Hi“而++j -最后程序打印4次"Hi”。

程序如何打印它4次,条件是如何在这里工作?

代码语言:javascript
复制
#include <stdio.h>

int main() {

    int j = 0;
    while(j++ < 3){
        printf( "Ha ");
    }
    do{
        j -= 2;
        printf( "Hi "); 
    }
    while(++j);
    for(j = 1; j <= 3; j++){
        printf( "Ho ");
    }
    printf("\n");
    return 0;
}

产出如下:

哈喜和河

EN

回答 4

Stack Overflow用户

发布于 2020-11-30 15:36:44

++j是前缀增量,即值将增加,然后将增加的值用于条件检查。

为了便于理解,我增加了一份书面声明:

代码语言:javascript
复制
do{
    j -= 2;
    printf( "Hi "); 
    printf("value of j before the while = %d\n", j);
}
while(++j);

产出如下:

代码语言:javascript
复制
Hi value of j before the while = 2
Hi value of j before the while = 1
Hi value of j before the while = 0
Hi value of j before the while = -1

所以,在

<

  • 第一次迭代,在while (++j)中,j2++jj迭代,3-2 = 1++j++j是2。H 115第三次迭代,2-2 = 0d17是1。H 218H 119第四次迭代,d20和d210-这使得while和循环结束。H 223f 224
票数 1
EN

Stack Overflow用户

发布于 2020-11-30 15:37:08

在第一个while循环之后

代码语言:javascript
复制
while(j++ < 3){
    printf( "Ha ");
}

J等于4。

因此,在do-while循环的第一次迭代中

代码语言:javascript
复制
do{
    j -= 2;
    printf( "Hi "); 
}
while(++j);

在第一次迭代之后,j等于3。在第二次迭代中,j等于1。第二次迭代之后,j等于2。在第三次迭代中,j等于0。在第三次迭代之后,j等于1,在第四次迭代中,j等于-1。所以在这个条件下的第四次迭代中

代码语言:javascript
复制
while(++j);

J等于0,并将该控件传递给下一个循环。所以并发循环被执行了4次。

即后缀增量运算符的值是增量之前的操作数的值。而预增量运算符的值是其增量后的操作数的值.

票数 1
EN

Stack Overflow用户

发布于 2020-11-30 15:38:16

后第一环

代码语言:javascript
复制
j == 4
j -= 2 == 2
Hi
++j == 3
j -= 2 == 1
Hi
++j == 2
j -= 2 == 0
Hi 
++j == 1
j -= 2 == -1
Hi
++j == 0 //end of th loop
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65076397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档