texttext 发表于 2022-11-20 06:40:21

我错在那里了?


int i,x,y;       
i=x=y=0;
do {
        ++i;
        if ( i%2 )
                x+=i,i++;
        y +=i++;
} while ( i<=7 );
printf("%d %d %d", i, x, y);

=============手工调试======================

                ++i        i%2        x+=i        i++        y+=i i++
第一轮        1        1        1        2        2        3
第二轮        4        0        -        -        6        7
第三轮        8        0        -        -        14        9跳出循环

i x y的值分别是9 1 14; i x 都是对的,但是y的值正确答案是20, 为什么呢?14错在哪里?

jhq999 发表于 2022-11-20 10:25:01

本帖最后由 jhq999 于 2022-11-20 10:37 编辑

我这里没错
               ++i          i%2      x+=i      i++      y+=i i++
第一轮      1      1                   1      2               2   3
第二轮      4      0                   -       -                6   5
第三轮      6      0                        -      -                12   7
第4轮          8      0                       -      -                20   9                  
9 1 20
Process returned 0 (0x0)   execution time : 0.269 s
Press any key to continue.
你把y +=i++;变成y+=i;i++;试试
因为不同编译器对自增编译不一样,尽量别像你那么实现,尽量拆开写

homeskating 发表于 2022-11-20 10:43:34

#include<stdio.h>
int main(void) {
        int i, x, y;
        i = x = y = 0;
        do {
                ++i;
                if ( i % 2 ) {
                        x += i,i++;

                }
                y += i, i++;
        } while ( i <= 7 );
        printf("%d %d %d", i, x, y);
}
9 1 20
--------------------------------
Process exited after 0.01842 seconds with return value 0

Press ANY key to exit...
把y+=i++变成y+=i;i++会出问题,按我这样貌似是没问题的,可以正常运行{:10_256:}

texttext 发表于 2022-11-20 11:05:47

jhq999 发表于 2022-11-20 10:25
我这里没错
               ++i          i%2      x+=i      i++      y+=i i++
第一轮      1...

多谢! 我知道错在哪里了。

texttext 发表于 2022-11-20 11:06:44

homeskating 发表于 2022-11-20 10:43
把y+=i++变成y+=i;i++会出问题,按我这样貌似是没问题的,可以正常运行

我用GCC编译器,都可以运行,结果也都是一样的   {:5_109:}
页: [1]
查看完整版本: 我错在那里了?