请大家帮忙看看问题所在(初学有点不理解)
题目大概:有5个学生的信息(包括学号,姓名,成绩),要求:用一个函数实现学生成绩的排名(由高到低),主函数输出学生信息及排名。
要求用结构体。
#include<stdio.h>
typedef struct {
int num;
char name;
int score;
}stu;
int main()
{
stu s={{1,"xiaoming",80},{2,"xiaohong",90},{3,"xiaoliang",60},{4,"xiaozhang",85},{5,"xiaoli",100}};
int i;
for(i=0;i<5;i++)
{
printf("第%d名:",i+1);
printf("%d %s %d\n",s.num,s.name,s.score);
}
rank(s);
for(i=0;i<5;i++)
printf("%d %s %d",s.num,s.name,s.score);
}
void rank(stu a)
{
stu x;
int i,j;
for(i=0;i<4;i++)
{
for(j=4;j>i;j--)
{
if(a.score<a.score)
{
x=a;
a=a;
a=x;
}
}
}
}
编译的时候报错,error C2371: 'rank' : redefinition; different basic types
不明白为什么rank会重复定义了。 #include<stdio.h>
typedef struct {
int num;
char name;
int score;
}stu;
void rank(stu a);//在此处加上一个函数的声明
int main()
{
stu s={{1,"xiaoming",80},{2,"xiaohong",90},{3,"xiaoliang",60},{4,"xiaozhang",85},{5,"xiaoli",100}};
int i;
for(i=0;i<5;i++)
{
printf("第%d名:",i+1);
printf("%d %s %d\n",s.num,s.name,s.score);
}
rank(s);
for(i=0;i<5;i++)
printf("%d %s %d",s.num,s.name,s.score);
}
void rank(stu a)
{
stu x;
int i,j;
for(i=0;i<4;i++)
{
for(j=4;j>i;j--)
{
if(a.score<a.score)
{
x=a;
a=a;
a=x;
}
}
}
}
问题原因: 因为你的函数定义且声明在下面,当main函数里头要调用 rank 函数是就找不到这个函数的声明或原型,所以会把这个函数当作一个未定义的函数看待。 只要你把声明放在要调用此函数一句的上方即可。 你把main函数里面的
rank(s)改成
rank(s)应该就可以了; qq1242009750 发表于 2018-12-9 11:33
问题原因: 因为你的函数定义且声明在下面,当main函数里头要调用 rank 函数是就找不到这个函数的声 ...
加完函数声明 我把 rank(s)改成 rank(stu s) 编译 又报错{:10_243:} {:10_243:}
error C2143: syntax error : missing ')' before 'type'
error C2198: 'rank' : too few actual parameters
error C2059: syntax error : ')' 190155801 发表于 2018-12-9 12:30
你把main函数里面的
rank(s)改成
rank(s)应该就可以了;
为什么改成rank(stu s) 会报错呢? inperfect 发表于 2018-12-9 12:49
为什么改成rank(stu s) 会报错呢?
你的问题是 在调用之前,没有此函数的声明。在前头加个声明就好了 qq1242009750 发表于 2018-12-9 13:00
你的问题是 在调用之前,没有此函数的声明。在前头加个声明就好了
哦哦这个问题已经了解 多谢{:10_257:} inperfect 发表于 2018-12-9 12:49
为什么改成rank(stu s) 会报错呢?
因为 rank(stu s) stu s是一个还没有创建的实体,但函数里只能传递已存在的实体
页:
[1]