求助,这个哪里错了,查询输入什么都是学生不存在
#include <stdio.h>#include <string.h>
struct student{
int num;
char sex,name;
int room,chinese,math,english;
double total,aver;}s;
void main()
{
int i,n;
struct student s;
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=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.num,s.sex,s.name,s.room,s.chinese,s.math,s.english,s.total,s.aver);
}
printf("是否继续?(y/n)");
if (getchar()=='n')
{break;}
}
else if (choose==2)
{
char xingming;
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.num,s.sex,s.name,s.room,s.chinese,s.math,s.english,s.total,s.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.num,s.sex,s.name,s.room,s.chinese,s.math,s.english,s.total,s.aver);
}
}
int Student_SearchByIndex(int xuehao)
{
int i;
for (i=0;i<50;i++)
{
if (s.num==xuehao)
{return i;}
}return -1;
}
int Student_SearchByName(char xingming[])
{int i;for (i=0;i<50;i++)
{if (strcmp(s.name,xingming)==0)
{return i;}
}return -1;
} 得闲输入数据,再查询才能有 newu 发表于 2019-6-23 14:00
得闲输入数据,再查询才能有
输入了,然后查询的时候都是学生不存在 库\文档 有人吗。。 没有录入数据,怎么会查得到
小甲鱼温馨提示:可以将该回答设置为最佳答案哦! 我的理解如下,不知道对不对:
在struct student{
int num;
char sex,name;
int room,chinese,math,english;
double total,aver;}s;
这里,你定义了一个s(假设我们称他为“大S”),
在main()中,又定义了一个s(假设我们称他为“小S”)
在input过程中,所有的数据是发送给小S的。
在查询的时候,因为你没有将小S作为变量传送给Search函数,所以该函数默认使用了大S作为参数。
大S中是空的,从来没有人发给他任何内容。
所以,查到最后,自然就找不到了。
不知道我有没有讲清楚,如果错了,请多指正。
结论:定义了两个名称一样,但作用域不一样的数组,又没有正确传递参数,所以就发生了上述问题。 #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
*/ #include <stdio.h>
#include <string.h>
struct student{
int num;
char sex,name;
int room,chinese,math,english;
double total,aver;}s;
void main()
{
int i,n;
//struct student s;
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=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.num,s.sex,s.name,s.room,s.chinese,s.math,s.english,s.total,s.aver);
}
printf("是否继续?(y/n)");
while(getchar()!='\n');
if (getchar()=='n')
{break;}
}
else if (choose==2)
{
char xingming;
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.num,s.sex,s.name,s.room,s.chinese,s.math,s.english,s.total,s.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.num,s.sex,s.name,s.room,s.chinese,s.math,s.english,s.total,s.aver);
}
}
int Student_SearchByIndex(int xuehao)
{
int i;
for (i=0;i<50;i++)
{
if (s.num==xuehao)
{return i;}
}return -1;
}
int Student_SearchByName(char xingming[])
{int i;for (i=0;i<50;i++)
{if (strcmp(s.name,xingming)==0)
{return i;}
}return -1;
} Lone-Wolf 发表于 2019-7-19 19:57
#include
#include
struct student{
去掉main里的//struct student s;一行
页:
[1]