高手请进!!!!!!!!

wan_ccgd 2009-07-12 02:55:44
有关printf嵌套的问题:
(1)
int a = 2;
printf("%d\n",printf("%d",a));
在VC下编译输出结果为:
21
(2)
int a = 2;
printf("%d\n",printf("The result is %d",a));
在VC下编译输出结果为
The result is 215。
(3)
int a = 2;
printf("%d\n",printf("The result is %d\n",a));
在VC下编译输出结果为
The result is 21
6

请各路高手指点迷津,为何输出上述结果?
在(2)中为何输出不是The result is 21
在(3)中为何输出不是The result is 2
1
...全文
56 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wan_ccgd 2009-07-13
  • 打赏
  • 举报
回复
谢谢各位的光临。。。。特别感谢wanggang999 ,Walf_ghoul 。结帖
Fleeboy 2009-07-12
  • 打赏
  • 举报
回复
唉,程序干嘛要写成这样呢...
wesleyluo 2009-07-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wanggang999 的回复:]
你应该知道printf()这个函数的返回值是什么意义,我赘述一下:
它的意义是,本次调用中,实际输出的字符的数量。

知道了这一点,你的问题就好解决了:


有关printf嵌套的问题:
(1)
int a = 2;
printf("%d\n",printf("%d",a));
在VC下编译输出结果为:
21
首先输出的是内层的 printf("%d",a),它输出了 a 的值,2,
然后外层的 printf() 输出了内层的返回值 1,
因为你没有…
[/Quote]
见解深入。
wan_ccgd 2009-07-12
  • 打赏
  • 举报
回复
谢谢ls
windsting 2009-07-12
  • 打赏
  • 举报
回复
你应该知道printf()这个函数的返回值是什么意义,我赘述一下:
它的意义是,本次调用中,实际输出的字符的数量。

知道了这一点,你的问题就好解决了:


有关printf嵌套的问题:
(1)
int a = 2;
printf("%d\n",printf("%d",a));
在VC下编译输出结果为:
21
首先输出的是内层的 printf("%d",a),它输出了 a 的值,2,
然后外层的 printf() 输出了内层的返回值 1,
因为你没有把它们断开,就得到了现在的结果,它不是二十一,而是一个2和一个1.


(2)
int a = 2;
printf("%d\n",printf("The result is %d",a));
在VC下编译输出结果为
The result is 215。
这个还用说么?2怎么来的知道了吧,15...你数数双引号中应该输出的字符是多少个。

(3)
int a = 2;
printf("%d\n",printf("The result is %d\n",a));
在VC下编译输出结果为
The result is 21
6
这个我跟你运行的结果不同,我的结果是:
The result is 2
16
至于你的结果怎么来的,我就不清楚了,至少根据我的解释,我的结果是很合理的。
Walf_ghoul 2009-07-12
  • 打赏
  • 举报
回复
printf()的返回值是打印的字符数,如果发生错误则返回一个负值.
wan_ccgd 2009-07-12
  • 打赏
  • 举报
回复
不好意思,写错了,(3)输出结果是:
The result is 2
16
Walf_ghoul 2009-07-12
  • 打赏
  • 举报
回复
运行了下(vc6)lz的第三个应该是:
2
16
Walf_ghoul 2009-07-12
  • 打赏
  • 举报
回复
有关printf嵌套的问题:
(1)
int a = 2;
printf("%d\n",printf("%d",a));
在VC下编译输出结果为:
21
..............................
先执行printf("%d",a)打印出2,它的返回值是打印的数目,返回1,然后执行外层的打印输出1,所以就是21了
(2)
int a = 2;
printf("%d\n",printf("The result is %d",a));
在VC下编译输出结果为
The result is 215。
...........................................
如(1),先打印2,返回15,打印15.
(3)
int a = 2;
printf("%d\n",printf("The result is %d\n",a));
在VC下编译输出结果为
The result is 21
6
.................................
多了个\n所以后面是16 ,但感觉应该是2 然后换行16,这个想想看。。。

请各路高手指点迷津,为何输出上述结果?
在(2)中为何输出不是The result is 21
在(3)中为何输出不是The result is 2
1
wan_ccgd 2009-07-12
  • 打赏
  • 举报
回复
sf

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧