| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2079 人关注过本帖
标题:关于printf输出函数的问题
只看楼主 加入收藏
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
结帖率:66.67%
收藏
已结贴  问题点数:10 回复次数:4 
关于printf输出函数的问题
下面程序我分别在DEV C++  和VC++6.0上运行了一遍,结果不一样,我看网上说了不同的编译器在某些程序
的运行结果等方式上可能会有不同,那正式考试的时候以哪个为主呢?在线等,略急哈哈,谢谢!


程序代码:
#include <stdio.h>

main() 
{ 
    int n=1; 
    printf("%d,%d,%d\n",n,++n,n--); 
    printf("%d\n",n);
} 


运行结果如下:
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: printf 输出 函数 运行 结果 
2019-03-15 16:16
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册:2011-1-18
收藏
得分:5 
我看网上说了不同的编译器在某些程序的运行结果等方式上可能会有不同
所以网上的话不能信,这是“未定义行为”
printf("%d,%d,%d\n",n,++n,n--); 标准没有规定 先评估 n,还是 ++n,还是 n-- ?
而“不同的编译器上可能会有不同”这属于“实现定义行为”

正式考试的时候以哪个为主呢?
如果考试中出现这种弱智题目,那一定是谭浩强的版本,那谭浩强的书怎么讲你就怎么答。

2019-03-15 16:33
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
收藏
得分:0 
回复 2楼 rjsp
我用的是王曙燕版本

printf函数中参数的计算顺序应该是先 n--,再 ++n, 最后 n

那么用 VC++ 6.0 运行结果是 2 2 1, 先执行 n--, 结果是 1,然后 ++n, 结果为2, 最后 n, 结果也为2, 理由如下图,我运行了一下图里的结果3 3 2 2 是对的,

就像图里说的注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的!
图片附件: 游客没有浏览图片的权限,请 登录注册


但是用 DEV C++ 去执行就不是了,它也是先 n--,再 ++n, 最后 n,但它好像是在n--执行完后(也就是整条printf函数还没执行完)就使得n本身自减为0了

然后++n为1, 最后n为1, 结果为 1 1 1

我都晕乎了,但是当时老师给我们每次上课时用的都是VC++ 6.0, 唉
2019-03-15 17:50
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
收藏
得分:5 
    OK,看LZ帖子得知是上机考试需要,这里不谈论编译器到底区别在哪里,也不讨论语法问题。
    告诉楼主一秘诀(百试不爽):问你们老师上机考试环境,以你们学校的上机考试环境为主。
    至于为什么运行出来是这个答案,根据你考试的编译器去理解(你既然已经明白编译器之间存在差异,想必不会钻牛角尖的。)
    最后,期待LZ满分结贴,祝LZ考试顺利,加油!

[此贴子已经被作者于2019-3-15 20:42编辑过]


I'm a new comer
2019-03-15 20:41
选调生
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:82
专家分:100
注 册:2016-6-24
收藏
得分:0 
回复 4楼 邹阳
好的谢谢
2019-03-16 12:05
快速回复:关于printf输出函数的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015567 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved