鱼C论坛

 找回密码
 立即注册
查看: 2078|回复: 8

请大家帮忙看看问题所在(初学有点不理解)

[复制链接]
发表于 2018-12-9 11:22:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目大概:
有5个学生的信息(包括学号,姓名,成绩),要求:用一个函数实现学生成绩的排名(由高到低),主函数输出学生信息及排名。
要求用结构体。



#include<stdio.h>
typedef struct {
        int num;
        char name[20];
        int score;
}stu;
int main()
{
        stu s[5]={{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[i].num,s[i].name,s[i].score);
        }
        rank(s[5]);
        for(i=0;i<5;i++)
        printf("%d %s %d",s[i].num,s[i].name,s[i].score);
       
}
void rank(stu a[5])
{
        stu x;
        int i,j;
        for(i=0;i<4;i++)
        {
                for(j=4;j>i;j--)
                {
                        if(a[i].score<a[j].score)
                        {
                                x=a[j];
                                a[j]=a[i];
                                a[i]=x;
                        }
                }
        }
       
}






想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-12-9 11:23:54 | 显示全部楼层
编译的时候报错,error C2371: 'rank' : redefinition; different basic types
不明白为什么rank会重复定义了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 11:33:31 | 显示全部楼层
#include<stdio.h>
typedef struct {
        int num;
        char name[20];
        int score;
}stu;

void rank(stu a[5]);  //在此处加上一个函数的声明

int main()
{
        stu s[5]={{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[i].num,s[i].name,s[i].score);
        }
        rank(s[5]);
        for(i=0;i<5;i++)
        printf("%d %s %d",s[i].num,s[i].name,s[i].score);
        
}
void rank(stu a[5])
{
        stu x;
        int i,j;
        for(i=0;i<4;i++)
        {
                for(j=4;j>i;j--)
                {
                        if(a[i].score<a[j].score)
                        {
                                x=a[j];
                                a[j]=a[i];
                                a[i]=x;
                        }
                }
        }
}


问题原因: 因为你的函数定义且声明在下面,当main函数里头要调用 rank 函数是就找不到这个函数的声明或原型,所以会把这个函数当作一个未定义的函数看待。 只要你把声明放在要调用此函数一句的上方即可。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 12:30:14 | 显示全部楼层
你把main函数里面的
rank(s[5])改成
rank(s)应该就可以了;
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-9 12:48:13 | 显示全部楼层
qq1242009750 发表于 2018-12-9 11:33
问题原因: 因为你的函数定义且声明在下面,当main函数里头要调用 rank 函数是就找不到这个函数的声 ...

加完函数声明 我把 rank(s[5])  改成 rank(stu s[5]) 编译 又报错
        error C2143: syntax error : missing ')' before 'type'
        error C2198: 'rank' : too few actual parameters
        error C2059: syntax error : ')'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-9 12:49:45 | 显示全部楼层
190155801 发表于 2018-12-9 12:30
你把main函数里面的
rank(s[5])改成
rank(s)应该就可以了;

为什么改成rank(stu s[5]) 会报错呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 13:00:34 | 显示全部楼层
inperfect 发表于 2018-12-9 12:49
为什么改成rank(stu s[5]) 会报错呢?

你的问题是 在调用之前,没有此函数的声明。在前头加个声明就好了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-9 13:10:38 | 显示全部楼层
qq1242009750 发表于 2018-12-9 13:00
你的问题是 在调用之前,没有此函数的声明。在前头加个声明就好了

哦哦  这个问题已经了解 多谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-9 13:51:51 | 显示全部楼层
inperfect 发表于 2018-12-9 12:49
为什么改成rank(stu s[5]) 会报错呢?

因为 rank(stu s[5]) stu s[5]是一个还没有创建的实体,但函数里只能传递已存在的实体
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表