鱼C论坛

 找回密码
 立即注册
查看: 1757|回复: 5

关于小甲鱼的教程中,自增自减用printf输出时,到底是按照啥的求值顺序啊??

[复制链接]
发表于 2015-3-8 17:27:10 | 显示全部楼层 |阅读模式

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

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

x
看视频教程的时候,举了如下例子,叫我们注意用Printf函数输出时,注意输出列表中的求值顺序问题,但没有说明到底是什么顺序:
#include <stdio.h>
void main ()
{
    int i=8;
    printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
}
输出结果是
8
7
8
8
-8
-8

看到第一行输出数字是8,应该就知道不是从左开始执行的。
于是我假设是从右开始执行,对程序做了如下修改

#include <stdio.h>
void main ()
{
    int i=8;
    printf("%d\n",-i--);
    printf("%d\n",-i++);
    printf("%d\n",i--);
    printf("%d\n",i++);
    printf("%d\n",--i);
    printf("%d\n",++i);
}

输出结果:
-8
-7
8
7
7
8

还是不对啊,到底求值顺序是什么?求高手指点!我用的是VC6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-3-8 17:42:40 | 显示全部楼层
楼主我和你大体相同,我使用的是++i和i++  但结果显示的不一样  特别是和你的++i和i++
#include <stdio.h>
void main()
{
        int a = 8;
        int b = a++;
        int c = ++a;
        int d = a--;
        int e = --a;
        printf("the b is %d\nthe c is %d\nthe d is%d\nthe e is %d\n",b ,c,d,e);

}

结果显示的  8 10 10 8
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-8 19:57:31 | 显示全部楼层
小小书童abc 发表于 2015-3-8 17:42
楼主我和你大体相同,我使用的是++i和i++  但结果显示的不一样  特别是和你的++i和i++

是啊,显示的结果跟预想中不一样,不知道是不是跟编译器有关系吧。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-8 20:58:33 | 显示全部楼层
任何顺序都有可能,不同的C编译器有不同的做法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-3-8 22:54:29 | 显示全部楼层
仰望天上的光 发表于 2015-3-8 20:58
任何顺序都有可能,不同的C编译器有不同的做法。

既然这样的话,我就可以不纠结这个问题了吧。
遇到这种算法的时候,我不用这种输出形式,就可以避免错误了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-3-9 16:03:36 | 显示全部楼层
rayj 发表于 2015-3-8 22:54
既然这样的话,我就可以不纠结这个问题了吧。
遇到这种算法的时候,我不用这种输出形式,就可以避免错误 ...

可以不纠结,我个人认为这个题目只是个反例,时时刻刻提醒你自己写程序千万不要写出类似的东西出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-18 20:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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