| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4677 人关注过本帖
标题:[分享]一个scanf() 函数引发的思考
取消只看楼主 加入收藏
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
结帖率:100%
收藏
 问题点数:0 回复次数:17 
[分享]一个scanf() 函数引发的思考

我以前就注意到 逗号运算在函数调用特别性,
我个人认为有必要把这个问题发出来是有必要的.

我举一个例子:
...
int main(void)
{
int a=0;
clrscr();
scanf("%d %d",&a,&a);
printf("%d",a);
getch();
}

我输入的是: 12 34
结果是: 12
这就说明 这个时侯逗号运算是从右到左的,

可以试一下:
prinf("%d %d",a++,a++)
fun(a++,a++)
看一看.

搜索更多相关主题的帖子: scanf 函数 思考 分享 
2007-03-16 20:14
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
以下是引用PcrazyC在2007-3-16 20:35:47的发言:
prinf("%d %d",a++,a++)
fun(a++,a++)


这里面是由于"++"的作用,并没有逗号运算符

main()
{
int a=0;
clrscr();
printf("%d %d",a++,a++);
getch();
}
结果:
1 0
证明是从右到左的运算方式.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 20:44
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
prinf("%d %d",a++ ,a++)

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 20:45
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
以下是引用PcrazyC在2007-3-16 20:30:07的发言:
这不是逗号运算符!在这个地方之所以为12是因为这个运算符的作用"&",他的结合方向是从右到左.

& 是单目运算符.


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 20:47
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
以下是引用moonwalker在2007-3-16 20:32:27的发言:

楼上的逗号运算符的概念是不对的,
scanf("%d %d",&a,&a);
这一句中&a,&a的逗号是用来分开输出列表的分隔符,并不是逗号运算符
还有你的例子中的fun函数是什么功能?没有见过

int fun(int a,int b)
{
printf("a=%d\nb=%d",a,b);
}
int main()
{
int a=0;
fun(a++,a++);
}
你看一看结果是不是和你想象中的一样?


wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 20:50
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
以下是引用moonwalker在2007-3-16 21:05:15的发言:
看看下面这个逗号表达式的程序:
int main()
{
int a=0,b=0;
int c,d;
c=(a++,a++);
d=(b++,b++,b++);
printf("c=%d\n",c);
printf("d=%d",d);
}
结果是c=1,d=2
显然是先执行表达式1,再执行表达式2
你可以看看谭浩强那本书P64(第二版)有说明你那种不是逗号表达式
只是printf函数参数的分隔符
逗号运算号是从左到右的结合顺序,但在函数调用这种特殊情况下是从右到左的.
你有没有更好的解释说明这个问题.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 21:37
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
int fun(int a,int b)
{
printf("a=%d\nb=%d",a,b);
}
int main()
{
int a=0;
fun(a++,a++);
}


这是一个很好的例子,

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 21:54
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
a=0;
fun(a++,a++);

先执行 右边的a++,
fun(a++,0) a=1;
再执行左边的a++,
fun(1,0); a=2
结果是:
a=1
b=0

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 22:50
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 
谢谢moonwalker的建议,
但我可以肯定的回答是:我不相信教材.

wap酷禾网(http://wap.),提供免费的、优质的、快捷的wap资源下载服务。
2007-03-16 23:16
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
收藏
得分:0 

希望这么一天早点到来.


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



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

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