| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4677 人关注过本帖
标题:[分享]一个scanf() 函数引发的思考
只看楼主 加入收藏
neverTheSame
Rank: 3Rank: 3
来 自:江西农业大学
等 级:新手上路
威 望:9
帖 子:1511
专家分:0
注 册:2006-11-24
结帖率:100%
收藏
 问题点数:0 回复次数:51 
[分享]一个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
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
这不是逗号运算符!在这个地方之所以为12是因为这个运算符的作用"&",他的结合方向是从右到左.

雁无留踪之意,水无取影之心
2007-03-16 20:30
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 

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


“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-16 20:32
PcrazyC
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:5652
专家分:0
注 册:2006-10-20
收藏
得分:0 
prinf("%d %d",a++,a++)
fun(a++,a++)


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

雁无留踪之意,水无取影之心
2007-03-16 20:35
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
I喜欢c
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:64
帖 子:1749
专家分:0
注 册:2007-3-2
收藏
得分:0 

并不是逗号运算符!

而它本身就是自右向左运算!


 我是指针,却丢失了目标地址!          我是循环,却缺少了结束条件!      我是函数,却没有人来调用!   
2007-03-16 21:01
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
收藏
得分:0 
看看下面这个逗号表达式的程序:
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函数参数的分隔符

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2007-03-16 21:05
快速回复:[分享]一个scanf() 函数引发的思考
数据加载中...
 
   



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

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