| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 995 人关注过本帖
标题:宏的问题,详情请进!~!~
只看楼主 加入收藏
yiqing8854
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2006-6-4
收藏
 问题点数:0 回复次数:10 
宏的问题,详情请进!~!~
书上原题如下:
定义一个带参数的宏,使两个参数的值互换,并写出程序,输入两个数作为使用宏时的实参。输出以交换后的两个值。#include<stdio.h>
#define S(a,b) t=a;a=b;b=t
int main(void)
{
int a,b,t;
scanf("%d,%d",*a,*b);
S(a,b);
printf("result is %d,%d",a,b);
return 0;
}

书上的答案是:
#define SWAP(a,b) t=b;b=a;a=t
main()
{int a,b,t;
printf("Input two integers a,b:");
scanf("%d,%d,"*a,*b);
SWAP(a,b);
printf("Now,a=%d,b=%d\n",a,b);
}
运行结果如下:
Input two integers a,b:3,4
Now,a=4,b=3
我在TURBO C++3.0下同不过,(以在TOP加入head information)
VC++6.0编译也同不过。
书上的答案也同不过啊,真不知道老潭是怎么出书,我买的是第二版的练习
搜索更多相关主题的帖子: 详情 int main scanf 
2006-06-09 16:27
lj_860603
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:714
专家分:0
注 册:2006-1-25
收藏
得分:0 
scanf("%d,%d,"*a,*b); ==》 scanf("%d,%d,"&a,&b);

我的原则很简单:不做不喜欢的事!
2006-06-09 16:50
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
收藏
得分:0 
scanf("%d,%d",&a,&b);
除了楼上改的,把逗号也拿到引号外面来吧,

对不礼貌的女生收钱......
2006-06-09 18:40
yiqing8854
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2006-6-4
收藏
得分:0 
能不能把程序写出来,我好知道错在哪里啊!~!

2006-06-10 10:45
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
饿,奇怪了.
这样也能行?
他们的意思就是你
#define S(a,b) t=a;a=b;b=t
int main(void)
{
int a,b,t;
scanf("%d,%d",*a,*b);//这边的问题应该写成scanf("%d,%d",&a,&b);
S(a,b);
printf("result is %d,%d",a,b);
return 0;
}

个人没怎么用过宏,是简单的函数对不.
那这个传值的运算可以完成交换的目的么?

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-10 11:33
yiqing8854
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2006-6-4
收藏
得分:0 
气死我了,在家里面的机器怎么过不去呢,天啊,我遍的没错啊,下面那个答案是老潭的,真让我伤心,

2006-06-11 15:17
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
#include <stdio.h>//这个有么?
#define S(a,b) t=a;a=b;b=t
int main(void)
{
int a,b,t;
scanf("%d,%d",&a,&b);
S(a,b);
printf("result is %d,%d",a,b);
return 0;
}


我用C-Free可以编译哈~运行结果正确。
唯一不明白的是,谁可以帮我解释下。这个传值运算是怎么交换的?

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-12 09:37
yiqing8854
Rank: 1
等 级:新手上路
帖 子:66
专家分:0
注 册:2006-6-4
收藏
得分:0 
呵呵,#include<stdio.h> 是我最注意的地方了,
宏和函数最大的区别是宏是字符的替换,而函数是值的传送.
#define * *不是语句

而函数int s(int n); 是语句!~!~

2006-06-12 10:30
走刀口→超
Rank: 6Rank: 6
等 级:贵宾
威 望:20
帖 子:5018
专家分:0
注 册:2006-3-14
收藏
得分:0 
哇。。。这个明白哈。
奇怪这是什么点。一下来这么多人哦~~~

人在江湖【走】,怎能不挨【刀】;为了能活【口】,唯有把己【超】!come on...
2006-06-12 10:33
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
以下是引用走刀口→超在2006-6-12 9:37:21的发言:
#include <stdio.h>//这个有么?
#define S(a,b) t=a;a=b;b=t
int main(void)
{
int a,b,t;
scanf("%d,%d",&a,&b);
S(a,b);
printf("result is %d,%d",a,b);
return 0;
}


我用C-Free可以编译哈~运行结果正确。
唯一不明白的是,谁可以帮我解释下。这个传值运算是怎么交换的

原先:
S(a,b);
宏替换后:
t=a;a=b;b=t;
根本没有“传值”(因为不是函数调用)


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-12 10:37
快速回复:宏的问题,详情请进!~!~
数据加载中...
 
   



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

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