| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1283 人关注过本帖, 1 人收藏
标题:cout输出顺序~~请高手们帮帮忙!
只看楼主 加入收藏
Lo伊。琪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-3-25
收藏(1)
 问题点数:0 回复次数:8 
cout输出顺序~~请高手们帮帮忙!
楼主
#include <iostream>
using namespace std;
int f(int a)
{
auto int b=0;  //auto可以省略
static int c=3;
b+=1;
c+=1;
return a+b+c;
}

int main()
{
int a=2,i;
/*for(i=0;i <3;i++)
cout < <f(a) < <" ";
cout < <endl;*/
cout < <f(a) < <" " < <f(a) < <" " < <f(a) < <endl;
return 0;
}

此时输出是9 8 7
而把注释的内容替换它下面的输入语句,输出是7 8 9
问题:请问高手,为什么同样调用3次f(a),输出顺序相反呢?
我用的是VC6.0
不胜感激
问题补充:
cout自右向左输出不对,如果定义int a,b,c;
a=1,b=2,c=3;
cout<<a<<b<<c<<endl;
输出123而不是321



#include<iostream.h>
//add()函数的定义,其有返回值
double add(double x,double y)
{
    double z;
    z=x+y;
    cout<<x<<"+"<<y<<"="<<z<<endl;
    return(z);
}

void main()
{
    double a=0.5,b=1.0,p;
   
    //以不同参数形式调用函数add()
    cout<<"add(a,b)="<<add(a,b)<<endl;
}
此时输出的结果:0.5+1=1.5
                add(a,b)=1.5
问题:为什么不是先输出cout<<"add(a,b)="<<add(a,b)<<endl;语句中的字符串常量"add(a,b)="再调用add()函数呢?请高手们给小弟指点指点,不胜感激啊!

  

 
搜索更多相关主题的帖子: 输出 顺序 cout 
2010-03-25 09:56
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:0 
cout是从右到左运算完再输出的吧,输出顺序是从左到右,参数入栈顺序就不一样了

1.cout参数入栈的顺序是从右到左...例如cin < <a < <b < <c;在栈中的位置如下:c-b-a.. <-(栈指针);但是输出是从栈指针的位置开始的,意思即这时的输出顺序仍然是abc....否则有违常理...
2.如果参数是有待计算的函数,例如...cin < <f(a) < <f(b) < <f(c) < <endl;这时我认为cin会先把函数放进栈中然后再计算..意思是这时栈顺序是f(c)-f(b)-f(a).. <-..但是这时候计算的顺序却是f(c)最先,f(b)次之,f(a)最后...
下面的程序验证了我说的:

C/C++ code

#include <iostream>
using namespace std;

int fa()
{
    cout<<"fa()"<<endl;
    return 1;
}

int fb()
{
    cout<<"fb()"<<endl;
    return 2;
}

int fc()
{
    cout<<"fc()"<<endl;
    return 3;
}
int main()
{
   
    cout<<fa()<<fb()<<fc()<<endl;
    return 0;
}
/*
输出:fc()
     fb()
     fa()
     123
*/



[ 本帖最后由 秀痘魔导士 于 2010-3-25 10:11 编辑 ]
2010-03-25 10:07
Lo伊。琪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-3-25
收藏
得分:0 
回复 2楼 秀痘魔导士
非常感谢您的无私解答!小弟愚昧,还有点疑问哦,要是像您所说的,那我第一个程序的输出结果怎么会是:9 8 7 呢,可以再帮帮忙么。。
2010-03-25 22:59
风行
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2006-4-7
收藏
得分:0 
和重载函数的赋值是一样的,入栈从右到左,出栈从左到右。
2010-03-26 04:52
秀痘魔导士
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:6
帖 子:250
专家分:1150
注 册:2009-12-23
收藏
得分:0 
最右边的先入栈,计算得到7,然后中间的,8,最后左边的9,然后从左到右出栈,9,8,7
2010-03-26 09:14
vincentfon
Rank: 1
来 自:四川成都
等 级:新手上路
帖 子:15
专家分:2
注 册:2010-3-25
收藏
得分:0 
以下是引用秀痘魔导士在2010-3-25 10:07:44的发言:

cout是从右到左运算完再输出的吧,输出顺序是从左到右,参数入栈顺序就不一样了

1.cout参数入栈的顺序是从右到左...例如cin < <a < <b < <c;在栈中的位置如下:c-b-a.. <-(栈指针);但是输出是从栈指针的位置开始的, ...
谢谢,学到了。

Fon
2010-03-26 10:18
Lo伊。琪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-3-25
收藏
得分:0 
回复 5楼 秀痘魔导士
非常感谢您抽空帮小弟解答疑惑,我明白了。。。呵呵,谢谢您!
2010-03-26 12:51
Lo伊。琪
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-3-25
收藏
得分:0 
回复 4楼 风行
呵呵。。小弟懂了,谢谢您哦!
2010-03-26 12:52
君临◆XQ
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2009-11-11
收藏
得分:0 
顶2楼
2010-03-26 23:49
快速回复:cout输出顺序~~请高手们帮帮忙!
数据加载中...
 
   



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

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