这两个编码不是一样的吗,为什么运行时会不一样的?
我只改了#define f %d %s %f
#include <stdio.h>
#define f %d %s %f
struct student
{int num;
char name[20];
float score;
};
void print(struct student stu[])
{int i;
float sum=0,aver;
for(i=0;i <2;i++)
{if(stu[i].score> =60)
printf( "f ",stu[i].num,stu[i].name,stu[i].score);
sum=sum+stu[i].score;
}
aver=sum/2;
printf( "%f\n ",aver);
}
void main()
{
struct student stu[2];
struct student *p;
int i;
printf( "please input students 's information: ");
for(i=0;i <2;i++)
scanf( "f ",&stu[i].num,&stu[i].name,&stu[i].score);
p=stu;
print(p);
#include <stdio.h>
#define f "%d %s %f "
struct student
{int num;
char name[20];
float score;
};
void print(struct student stu[])
{int i;
float sum=0,aver;
for(i=0;i <2;i++)
{if(stu[i].score> =60)
printf(f,stu[i].num,stu[i].name,stu[i].score);//这里当然也改了
sum=sum+stu[i].score;
}
aver=sum/2;
printf( "%f\n ",aver);
}
void main()
{
struct student stu[2];
struct student *p;
int i;
printf( "please input students 's information: ");
for(i=0;i <2;i++)
scanf(f,&stu[i].num,&stu[i].name,&stu[i].score);//这里当然也改了p=stu;
print(p);
}
[解决办法]
#define f %d %s %f
scanf( "f ",&stu[i].num,&stu[i].name,&stu[i].score);
这样的f不是宏,没有宏替换
[解决办法]
宏定义不替换字符串里的东西.
独立的应用才能替换.