萌星滴滴
2021-06-11 17:04
采纳率: 100%
浏览 124

用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++

谢谢泥萌!

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • CSDN专家-link 2021-06-11 17:42
    已采纳
    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找到啊

    1 打赏 评论
  • 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];
    1 打赏 评论
  • 有问必答小助手 2021-06-15 17:37

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

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

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

    打赏 评论

相关推荐 更多相似问题