| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4677 人关注过本帖
标题:[分享]一个scanf() 函数引发的思考
只看楼主 加入收藏
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
过两天碰到辙了,再来与你理论,现在没时间

雁无留踪之意,水无取影之心
2007-03-17 12:09
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 

唉 没意思


   好好活着,因为我们会死很久!!!
2007-03-17 12:42
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
为拉一个逗号   争拉半天   逗号运算符是有滴   但不是有逗号都是逗号运算符   

   好好活着,因为我们会死很久!!!
2007-03-17 14:01
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 

今天一不小心让我碰到了一个类似这个的问题,所以想再来一次反驳
你前面所举的例子全不是因为逗号运算符而造成的自右向左,都是由于部分系统在调用函数时,参数的求值顺序是自右向左,而且这里面的","是参数分隔符,而不是逗号运算符的,例子如下:
第一个例子例子如下:
int main(void)
{
int a=0;
clrscr();
scanf("%d %d",&a,&a);
printf("%d",a);
getch();
}

第二个例子如下:

main()
{
int a=0;
clrscr();
printf("%d %d",a++,a++);
getch();
}

第三个例子如下:
int fun(int a,int b)
{
printf("a=%d\nb=%d",a,b);
}
int main()
{
int a=0;
fun(a++,a++);
}

另外我给你举几个不在函数中的例子:
第一个例子
#include"stdio.h"

main()
{
int i,a=1,b=2,c=3;
for(i=0;i<1;a=b,b=c)
i++;
printf("%d\t%d\t%d\n",a,b,c);
}
你运行一下,如果是自右向左,答案就是3 3 3,如果是自左向右答案就是2 3 3

第二个例子:
main()
{
int i,j=1,b=0;
for(i=0;i<=1;b=j,j++)
{ printf("j=%d\tb=%d\n",j,b);
i++;
}
}
如果是自右向左,答案就是 j=1 b=0 j=2 b=2,如果是自左向右,答案就是j=1 b=0 j=2 b=1;

第三个例子:

#include"stdio.h"

main()
{
int i=1,j=2,b=3,a=4;
a=(i=j,j=b);
printf("%d\t%d\t%d\t%d\n",a,b,i,j);
}

如果是自右向左,答案就是 3 3 3 3,如果是自左向右,答案就是 3 3 2 3;

这样的例子还有很多,你自己想想吧,如果你有谭浩强的第二版的书,请参考P64,P112,P150这三页的内容.
另外我也找到了一个函数中参数求值顺序为自左向右的顺序的一个编译器,Turbo C For Windows,你用这个编译器运行你发的第一个例子就知道了,下载地址:http://www.newhua.com/soft/42127.htm


雁无留踪之意,水无取影之心
2007-03-22 11:01
Knocker
Rank: 8Rank: 8
等 级:贵宾
威 望:47
帖 子:10454
专家分:603
注 册:2004-6-1
收藏
得分:0 
1,函数参数中的 " , "仅是一个参数分隔符,不是逗号操作符
2,C语言函数参数压栈默认是___cdecl
3,是否存参数压栈次序与计算次序不同可能?

九洲方除百尺冰,映秀又遭蛮牛耕。汽笛嘶鸣国旗半,哀伤尽处是重生。     -老K
治国就是治吏。礼义廉耻,国之四维。四维不张,国之不国。   -毛泽东
2007-03-22 11:20
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
PcrazyC 你是一个很认真的人.
这一点我很佩服你.
但你说的话,我只看在眼里.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-23 17:09
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
为什么不记在心里呢?

雁无留踪之意,水无取影之心
2007-03-23 17:49
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

我不是一个轻易改变想法的人.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-23 18:24
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
大哥,我都给你找到一种编译器了,(44楼有地址)你用那个编译器去运行一下你最开始发的帖的那个程序试试

执着是编程所必需的,不然我也不会执着是吧.

觉得有点动摇了再看看44楼也就差不多被我征服了Good Luck!

雁无留踪之意,水无取影之心
2007-03-23 21:40
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

我佩服你持之以恒,
是的,我现在开始接受你的想法,
谢谢你.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-23 22:07
快速回复:[分享]一个scanf() 函数引发的思考
数据加载中...
 
   



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

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