简单C问题,,麻烦各位了~

来源:百度知道 编辑:UC知道 时间:2024/06/22 08:33:39
/*fun函数返回指定学号的学生数据.指定的学号在主函数中输入.若没找到指定学号.在结构体变量中给学号置空串.给成绩置-1作为函数值返回*/

#include"stdio.h"
#include"string.h"
#define N 16

typedef struct
{
char num[10];
int s;
} STREC;

STREC fun(STREC *a,char *b)
{
int i;
STREC t={" ",-1};
for(i=0;i<=N;i++)
{
if(strcmp(a[i].num,b)==0)
return a[i];
}
return t;

}

main()
{
STREC s[N]={{"GAOO5",85},{"GAOO3",76},{"GAOO2",69},{"GAOO4",85},
{"GAOO1",91},{"GAO07",72},{"GAOO8",64},{"GAOO6",87},
{"GAO15",85},{"GAO13",91},{"GAO12",64},{"GAO14",91},
{"GAO11",77},{"GAO17",64},{"GAO18",64},{"GAO16",72}};

STREC h;
char m[10];
int i,n;FILE *out;
printf("The original data:\n");

STREC fun(STREC *a,char *b)
{
int i;
STREC t={" ",-1};
for(i=0;i<=N;i++)
{
if(strcmp(a[i].num,b)==0)
return a[i];
}
return t;

这里表示找到了返回的数据类型就是错的,a[i]是一个字符类型,但是函数要求的返回类型是一个结构体的类型,找到了,就应该把t更新,t={a[i].num,a[i].s},返回t才有可能表示那个意思。 STREC h是为了保存函数返回的学生信息。b是一个临时变量,就是保存通过函数调用传递过来的指定的学生学号的信息。main()函数就是实现了一个输入学生信息,任意查找学生信息,和指定学生的学号的方式来查询学生的信息。
答案补充:return t是正确的,我说的不能return a[i],统一返回t就对了。b是形参,h是临时变量。这样看来你对函数调用不明白?b其实是可有可无的,因为C的编译器在检查类型的时候只关注类型,而不再关注其中的形参,而h是接收函数返回的信息。如果不明白,你可以参考其他的简单数据类型的函数调用,毕竟结构体将多种数据类型综合起来,不熟悉的有点不懂!
我真的有点说不清楚了,h=fun(s,m); 这是函数调用,函数原型是STREC fun(STREC *a,char *b) ,那么你可以简单的认为m的值就是*b的内容,h就是保存fun()函数最后返回的值。我开始为了返回的一致性,说不能返回a[i],由于数组的每个元素的类型是结构体,所以可以的,开始没有看清楚,也是编程习惯,误导你了,不好意思啊。程序是正确的,你就多找点函数调用,文件使用方面的资料来看了……