用C语言结构体,输入学生姓名,查找是否有该学生

a.

现有一个班级的学生成绩,要求自定义结构体存储学生信息,学生信息包括学生姓名与学生成绩。然后编写函数完成对指定姓名的学生信息的查找,找到后打印学生信息,函数原型为:

STU * find(STU * aStu, int n, char * aName);

aStu代表数组首元素地址,n代表数组中元素个数,aName代表要查找学生的名字,如果找到则返回该学生的结构体的指针,没有找到返回NULL。

学生数组里面的学生数据信息自己填写,数组长度自定义,不存在重名学生,学生信息结构体如下:

typedef struct student
{
    char name[20];
    int score;
} STU;

将查找到的学生信息输出,学生信息包括学生姓名、学生成绩,中间使用空格隔开。如果没有找到则打印"没有找到"。

输入示例:

例1    张飞

例2     李逵

输出示例:

例1     张飞 95

例2    没有找到

b.我没办法成功输入学生姓名,所以我直接把定义了一个aName[20],把想找的姓名储存起来(这样就不用从键盘上输入了),但是最后只能打印出学生姓名,分数无法打印,而且会出现乱码

c.

#include <stdio.h>
#include <string.h>
typedef struct student
{
    char name[20];
    int score;
} STU;
STU * find(STU * aStu, int n, char * aName);
int main (void)
{
	/*char Name[20];
	scanf("%s",Name);*/
	//这里一直不能输入所以我改成了下面这一行
	char aName[20]="zhangsan";
	STU Stu[3]=
	{
		{"zhangsan",20},
		{"lisi",30},
		{"wangwu",40}
	};
	STU * x=find(Stu,3,aName); 
	if(x!=NULL)
		printf("%s %d",x->name,x->score);
	else
		printf("没有找到");
} 
STU * find(STU * aStu, int n, char * aName)
{
	int i;
	for(i=0;i<n;i++,aStu++)
	{
		while(strcmp(aStu->name,aName)==0)
		break;
	}
	printf("%s,%d\n",aStu->name,aStu->score);
	if(i<=n)
		return aStu;
	else
		return 0;
}

 

运行结果是这样的,理想的结果应该是zhangsan 20

用的软件是VS2012

ps:大佬们我是小白,刚开始学,插入代码段的时候不知道哪个是C语言,就选的C++

谢谢泥萌!

STU * find(STU * aStu, int n, char * aName)
{
	int i;
	for(i=0;i<n;i++,aStu++)
	{
		if(strcmp(aStu->name,aName)==0)
		    break;
	}
	if(i<n)
    {
        printf("%s,%d\n",aStu->name,aStu->score);
		return aStu;
    }
	else
		return 0;
}

用if,不是用while

printf也要确定是否aStu找到啊

for(i=0;i<n;i++,aStu++)
	{
		while(strcmp(aStu->name,aName)==0)
		break;
	}

改为
for(i=0;i<n;i++)
	{
		while(strcmp(aStu[i]->name,aName)==0)
		break;
	}
printf("%s,%d\n",aStu[i]->name,aStu[i]->score);
f(i<n)
		return aStu[i];

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632