我错在那里了?
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: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++;试试
因为不同编译器对自增编译不一样,尽量别像你那么实现,尽量拆开写
#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:} jhq999 发表于 2022-11-20 10:25
我这里没错
++i i%2 x+=i i++ y+=i i++
第一轮 1...
多谢! 我知道错在哪里了。 homeskating 发表于 2022-11-20 10:43
把y+=i++变成y+=i;i++会出问题,按我这样貌似是没问题的,可以正常运行
我用GCC编译器,都可以运行,结果也都是一样的 {:5_109:}
页:
[1]