鱼C论坛

 找回密码
 立即注册
查看: 1752|回复: 9

求助,这个哪里错了,查询输入什么都是学生不存在

[复制链接]
发表于 2019-6-23 13:50:36 | 显示全部楼层 |阅读模式

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

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

x
#include <stdio.h>
#include <string.h>
struct student{
        int num;
        char sex[5],name[10];
        int room,chinese,math,english;
        double total,aver;}s[50];
void main()
{
int i,n;
struct student s[50];
struct student input_student();
void output_student(struct student s[],int n);
int Student_SearchByIndex(int xuehao);
int Student_SearchByName(char name[]);
printf("请输入学生总人数:");
scanf("%d",&n);
for(i=0;i<n;i++){
        printf("\n 请输入第%d学生基本信息: \n",i+1);
        s[i]=input_student();
        }
printf("\n 输出学生信息表 \n");
printf("                      ______________________________________________________________________\n");
output_student(s,n);
printf("                     |______________________________________________________________________|\n\n");
while(1){
                int choose;
                printf("\n请输入您要查询学生的方式:\n\n");
                printf("1、按学号查询\n2、按姓名查询\n\n");
        printf("3、按名次查询\n4、按班级查询\n\n");
                printf("请选择:");
                scanf("%d",&choose);
                while(getchar()!='\n');
                if (choose==1){
                        int xuehao;int index;
                        printf("请输入要查询的学生的学号:");
                        scanf("%d",&xuehao);index=Student_SearchByIndex(xuehao);
                        if (index==-1)
                        {printf("学生不存在!\n");
                        }
                        else
                        {
                                printf("你要查询的学生信息为:学号     性别   姓名   班别   语文  数学  英语  总成绩   平均分\n");
                                printf("                     |%-9d%-7s%-7s%-7d%-6d%-6d%-6d%-9.2lf%-6.2lf       |\n",s[index].num,s[index].sex,s[index].name,s[index].room,s[index].chinese,s[index].math,s[index].english,s[index].total,s[index].aver);
}
                        printf("是否继续?(y/n)");
                        if (getchar()=='n')
                        {break;}
                }
                else if (choose==2)
                {
                        char xingming[20];
                        int index;
                        printf("请输入要查询的学生的姓名:");
                        scanf("%s",&xingming);
                        getchar();
                        index=Student_SearchByName(xingming);
                        if (index==-1)
                        {
                                printf("学生不存在!\n");
                        }
                        else
                        {
                                printf("你要查询的学生信息为:学号     性别   姓名   班别   语文  数学  英语  总成绩   平均分\n");
                                printf("                     |%-9d%-7s%-7s%-7d%-6d%-6d%-6d%-9.2lf%-6.2lf       |\n",s[index].num,s[index].sex,s[index].name,s[index].room,s[index].chinese,s[index].math,s[index].english,s[index].total,s[index].aver);
}

                        printf("是否继续?(y/n)");
                        if (getchar()=='n')
                        {
                                break;
                        }
                }
                else if (choose==0)
                {        printf("\n您选择了不查询!\n");
                        break;
                }
        }

}


struct student input_student()
{struct student s;
printf("学号 性别 姓名 班别 语文 数学 英语:\n");
scanf("%d%s%s%d%d%d%d",&s.num,s.sex,s.name,&s.room,&s.chinese,&s.math,&s.english);
s.total=s.chinese+s.math+s.english; s.aver=s.total/3;
return s;
}
void output_student(struct student s[],int n)
{int i;
printf("                     |学号     性别   姓名   班别   语文  数学  英语  总成绩   平均分       |\n");
for(i=0;i<n;i++){
        printf("                     |%-9d%-7s%-7s%-7d%-6d%-6d%-6d%-9.2lf%-6.2lf       |\n",s[i].num,s[i].sex,s[i].name,s[i].room,s[i].chinese,s[i].math,s[i].english,s[i].total,s[i].aver);
}
}
int Student_SearchByIndex(int xuehao)   
{
        int i;
for (i=0;i<50;i++)
{
        if (s[i].num==xuehao)
                {return i;}
}return -1;

}

int Student_SearchByName(char xingming[])   

{int i;for (i=0;i<50;i++)
{if (strcmp(s[i].name,xingming)==0)

                {return i;}

}return -1;

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

使用道具 举报

发表于 2019-6-23 14:00:58 | 显示全部楼层
得闲输入数据,再查询才能有
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-23 14:14:04 | 显示全部楼层
newu 发表于 2019-6-23 14:00
得闲输入数据,再查询才能有

输入了,然后查询的时候都是学生不存在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-23 14:16:55 | 显示全部楼层

                               
登录/注册后可看大图
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-6-23 14:19:52 | 显示全部楼层
有人吗。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-19 12:26:12 | 显示全部楼层
没有录入数据,怎么会查得到














小甲鱼温馨提示:可以将该回答设置为最佳答案哦!

评分

参与人数 1荣誉 -1 鱼币 -1 贡献 -1 收起 理由
Croper -1 -1 -1 这小尾巴自己打的吧,明目张胆骗最佳呢这是

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

发表于 2019-7-19 13:42:00 | 显示全部楼层
我的理解如下,不知道对不对:
在struct student{
        int num;
        char sex[5],name[10];
        int room,chinese,math,english;
        double total,aver;}s[50];
这里,你定义了一个s[50](假设我们称他为“大S”),

在main()中,又定义了一个s[50](假设我们称他为“小S”)

在input过程中,所有的数据是发送给小S的。

在查询的时候,因为你没有将小S作为变量传送给Search函数,所以该函数默认使用了大S作为参数。

大S中是空的,从来没有人发给他任何内容。
所以,查到最后,自然就找不到了。

不知道我有没有讲清楚,如果错了,请多指正。

结论:定义了两个名称一样,但作用域不一样的数组,又没有正确传递参数,所以就发生了上述问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-19 13:50:56 | 显示全部楼层
#include <stdio.h>

int i = 3;

int main()
{

        int search();
        int i = 7;

        printf("%d\n",search());

        return 0;
}

int search(){

        return i;
}
/× output:
* 3
*/
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-19 19:57:21 From FishC Mobile | 显示全部楼层
#include <stdio.h>
#include <string.h>
struct student{
        int num;
        char sex[5],name[10];
        int room,chinese,math,english;
        double total,aver;}s[50];
void main()
{
int i,n;
//struct student s[50];
struct student input_student();
void output_student(struct student s[],int n);
int Student_SearchByIndex(int xuehao);
int Student_SearchByName(char name[]);
printf("请输入学生总人数:");
scanf("%d",&n);
for(i=0;i<n;i++){
        printf("\n 请输入第%d学生基本信息: \n",i+1);
        s[i]=input_student();
        }
printf("\n 输出学生信息表 \n");
printf("                      ______________________________________________________________________\n");
output_student(s,n);
printf("                     |______________________________________________________________________|\n\n");
while(1){
                int choose;
                printf("\n请输入您要查询学生的方式:\n\n");
                printf("1、按学号查询\n2、按姓名查询\n\n");
        printf("3、按名次查询\n4、按班级查询\n\n");
                printf("请选择:");
                scanf("%d",&choose);
                while(getchar()!='\n');
                if (choose==1){
                        int xuehao;int index;
                        printf("请输入要查询的学生的学号:");
                        scanf("%d",&xuehao);index=Student_SearchByIndex(xuehao);
                        if (index==-1)
                        {printf("学生不存在!\n");
                        }
                        else
                        {
                                printf("你要查询的学生信息为:学号     性别   姓名   班别   语文  数学  英语  总成绩   平均分\n");
                                printf("                     |%-9d%-7s%-7s%-7d%-6d%-6d%-6d%-9.2lf%-6.2lf       |\n",s[index].num,s[index].sex,s[index].name,s[index].room,s[index].chinese,s[index].math,s[index].english,s[index].total,s[index].aver);
}
                        printf("是否继续?(y/n)");
                        while(getchar()!='\n');
                        if (getchar()=='n')
                        {break;}
                }
                else if (choose==2)
                {
                        char xingming[20];
                        int index;
                        printf("请输入要查询的学生的姓名:");
                        scanf("%s",&xingming);
                        getchar();
                        index=Student_SearchByName(xingming);
                        if (index==-1)
                        {
                                printf("学生不存在!\n");
                        }
                        else
                        {
                                printf("你要查询的学生信息为:学号     性别   姓名   班别   语文  数学  英语  总成绩   平均分\n");
                                printf("                     |%-9d%-7s%-7s%-7d%-6d%-6d%-6d%-9.2lf%-6.2lf       |\n",s[index].num,s[index].sex,s[index].name,s[index].room,s[index].chinese,s[index].math,s[index].english,s[index].total,s[index].aver);
}

                        printf("是否继续?(y/n)");
                        while(getchar()!='\n');
                        if (getchar()=='n')
                        {
                                break;
                        }
                }
                else if (choose==0)
                {        printf("\n您选择了不查询!\n");
                        break;
                }
        }

}


struct student input_student()
{struct student s;
printf("学号 性别 姓名 班别 语文 数学 英语:\n");
scanf("%d%s%s%d%d%d%d",&s.num,s.sex,s.name,&s.room,&s.chinese,&s.math,&s.english);
s.total=s.chinese+s.math+s.english; s.aver=s.total/3;
return s;
}
void output_student(struct student s[],int n)
{int i;
printf("                     |学号     性别   姓名   班别   语文  数学  英语  总成绩   平均分       |\n");
for(i=0;i<n;i++){
        printf("                     |%-9d%-7s%-7s%-7d%-6d%-6d%-6d%-9.2lf%-6.2lf       |\n",s[i].num,s[i].sex,s[i].name,s[i].room,s[i].chinese,s[i].math,s[i].english,s[i].total,s[i].aver);
}
}
int Student_SearchByIndex(int xuehao)   
{
        int i;
for (i=0;i<50;i++)
{
        if (s[i].num==xuehao)
                {return i;}
}return -1;

}

int Student_SearchByName(char xingming[])   

{int i;for (i=0;i<50;i++)
{if (strcmp(s[i].name,xingming)==0)

                {return i;}

}return -1;

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

使用道具 举报

发表于 2019-7-19 19:59:16 From FishC Mobile | 显示全部楼层
Lone-Wolf 发表于 2019-7-19 19:57
#include
#include
struct student{

去掉main里的//struct student s[50];一行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-17 00:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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