鱼C论坛

 找回密码
 立即注册
查看: 2435|回复: 4

[已解决]我错在那里了?

[复制链接]
发表于 2022-11-20 06:40:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

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错在哪里?
最佳答案
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++;试试
因为不同编译器对自增编译不一样,尽量别像你那么实现,尽量拆开写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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++;试试
因为不同编译器对自增编译不一样,尽量别像你那么实现,尽量拆开写
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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++会出问题,按我这样貌似是没问题的,可以正常运行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-20 11:05:47 | 显示全部楼层
jhq999 发表于 2022-11-20 10:25
我这里没错
               ++i          i%2        x+=i        i++        y+=i i++
第一轮        1  ...

多谢! 我知道错在哪里了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-11-20 11:06:44 | 显示全部楼层
homeskating 发表于 2022-11-20 10:43
把y+=i++变成y+=i;i++会出问题,按我这样貌似是没问题的,可以正常运行

我用GCC编译器,都可以运行,结果也都是一样的   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-20 18:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表