keyel69 2021-06-03 11:20 采纳率: 100%
浏览 89
已采纳

C语言结构体题目,乱码弹出崩溃了,求助!

题目:

(1) 定义一个包括:学号、姓名、性别、年龄和三门课成绩(语文、数学、外语)的结构体类型struct Student。

(2) 在主函数中定义一个包括5个元素的struct Student类型的数组students。前3个学生给定初值,后两个学生的信息在main函数中调用下面的input函数从键盘输入。

(3) 实现一个画横线的函数line, 用于绘制由n个字符c输出组成的行线,函数原形如下:

void line(char c,int n);

参数: c:要输出的字符,n:输出多少个

(4) 实现输入一个学生信息的函数input,函数原型如下:

void input( struct Student * stud );

参数:stud:指向要输入的学生的结构体变量或数组元素

(5) 实现输出一个学生信息的函数print,在一行中输出参数指定学生的所有信息、成绩、总分和平均分,函数原型如下:

void print( struct Student * stud );

参数:stud:指向要输出的学生的结构体变量或数组元素

(6) 实现一个输出所有学生信息的函数print_all,在该函数中输出表头,并调用print函数输出每个学生的信息及其总分和平均分,最后输出所有学生各门课(含个人总分和均分)的平均分。其原型如下:

void print_all( struct Student * studs,int n );

参数:studs:指向结构体数组的第一个元素,n:数组元素的个数

(7) 在主函数中调用input 函数输入后两个学生的信息,调用print_all函数输出所有学生的信息和各门课的平均分(含所有人总分和均分的平均分)。

 

憋了一早上的代码555

#include<stdio.h>

#define Maxsize 30

typedef struct Student
{
	int num;
	char name[Maxsize];
	char sex[Maxsize];
	int age;
	int Chinese;
	int Math;
	int English;
}Student;

void line(char c, int n)
{
	int i;
	for (i = 0; i < n; i++)
		printf("%c", c);
}

void input(Student* stud)
{
	scanf_s("%d", &stud->num);
	scanf("%s", stud->name);
	scanf("%s", stud->sex);
	scanf_s("%d", &stud->age);
	scanf_s("%d", &stud->Chinese);
	scanf_s("%d", &stud->Math);
	scanf_s("%d", &stud->English);
}

void print(Student* stud)
{
	int total, aver;
	total = stud->Chinese + stud->Math + stud->English;
	aver = total / 3;
	printf("%-8d%-8s%-8s%-8d%-8d%-8d%-8d%-8d%-8d\n", stud->num, stud->name, stud->sex, stud->age, stud->Chinese, stud->Math, stud->English, total, aver);
}

void print_all(Student* stud, int n)
{
	int i;
	int aver1 = 0, aver2 = 0, aver3 = 0, aver4, aver5;
	printf("学号	姓名	性别	年龄	语文	数学	英语	总分	均分\n");
	for (i = 1; i <= n; i++)
		print(stud + i);
	for (i = 1; i <= n; i++)
	{
		aver1 += (stud + i)->Chinese;
		aver2 += (stud + i)->Math;
		aver3 += (stud + i)->English;
	}
	printf("\n");
	aver4 = aver1 + aver2 + aver3;
	aver1 /= n;
	aver2 /= n;
	aver3 /= n;
	aver4 /= n;
	aver5 = aver1 + aver2 + aver3;
	aver5 /= n;
	printf(" 班级平均分						%-8d%-8d%-8d%-8d%-8d\n\n", aver1, aver2, aver3, aver4, aver5);

}

void main()
{
	Student stud[5];
	stud[1].num = 201701;
	*stud[1].name = "WangDachuan";
	*stud[1].sex = "man";
	stud[1].age = 25;
	stud[1].Chinese = 89;
	stud[1].Math = 88;
	stud[1].English = 99;

	stud[2].num = 201702;
	*stud[2].name = "ZhangDajiang";
	*stud[2].sex = "man";
	stud[2].age = 23;
	stud[2].Chinese = 90;
	stud[2].Math = 85;
	stud[2].English = 78;

	stud[3].num = 201703;
	stud[3].name[Maxsize] = "LiTiemei";
	stud[3].sex[Maxsize] = "woman";
	stud[3].age = 22;
	stud[3].Chinese = 95;
	stud[3].Math = 88;
	stud[3].English = 89;

	printf("输入后两个学生的信息(空格分隔,每行一人):\n\n");
	printf("学号   姓名   性别   年龄   语文   数学   英语\n\n");
	input(stud + 4);
	input(stud + 5);
	print_all(stud, 5);
}



但是运行的结果中,原本有的前三个成员的名字和性别都是乱码,成绩学号什么的都没问题,哪出了问题搞不明白,求助!

  • 写回答

3条回答 默认 最新

  • 关注
    #include<stdio.h>
    #include <string.h>
    #define Maxsize 30
    typedef struct Student
    {
    	int num;
    	char name[Maxsize];
    	char sex[Maxsize];
    	int age;
    	int Chinese;
    	int Math;
    	int English;
    }Student;
    void line(char c, int n)
    {
    	int i;
    	for (i = 0; i < n; i++)
    		printf("%c", c);
    }
    void input(Student* stud)
    {
    	scanf("%d", &stud->num);
    	scanf("%s", stud->name);
    	scanf("%s", stud->sex);
    	scanf("%d", &stud->age);
    	scanf("%d", &stud->Chinese);
    	scanf("%d", &stud->Math);
    	scanf("%d", &stud->English);
    }
    void print(Student* stud)
    {
    	int total, aver;
    	total = stud->Chinese + stud->Math + stud->English;
    	aver = total / 3;
    	printf("%-8d%-8s%-8s%-8d%-8d%-8d%-8d%-8d%-8d\n", stud->num, stud->name, stud->sex, stud->age, stud->Chinese, stud->Math, stud->English, total, aver);
    }
    void print_all(Student* stud, int n)
    {
    	int i;
    	int aver1 = 0, aver2 = 0, aver3 = 0, aver4, aver5;
    	printf("学号	姓名	性别	年龄	语文	数学	英语	总分	均分\n");
    	for (i = 1; i <= n; i++)
    		print(stud + i);
    	for (i = 1; i <= n; i++)
    	{
    		aver1 += (stud + i)->Chinese;
    		aver2 += (stud + i)->Math;
    		aver3 += (stud + i)->English;
    	}
    	printf("\n");
    	aver4 = aver1 + aver2 + aver3;
    	aver1 /= n;
    	aver2 /= n;
    	aver3 /= n;
    	aver4 /= n;
    	aver5 = aver1 + aver2 + aver3;
    	aver5 /= n;
    	printf(" 班级平均分						%-8d%-8d%-8d%-8d%-8d\n\n", aver1, aver2, aver3, aver4, aver5);
    }
    void  main()
    {
    	Student stud[5];
    	stud[1].num = 201701;
    	strcpy(stud[1].name,"WangDachuan");
    	strcpy(stud[1].sex,"man");
    	stud[1].age = 25;
    	stud[1].Chinese = 89;
    	stud[1].Math = 88;
    	stud[1].English = 99;
    	stud[2].num = 201702;
    	strcpy(stud[2].name,"ZhangDajiang");
    	strcpy(stud[2].sex,"man");
    	stud[2].age = 23;
    	stud[2].Chinese = 90;
    	stud[2].Math = 85;
    	stud[2].English = 78;
    	stud[3].num = 201703;
    	
    	strcpy(stud[3].name,"LiTiemei");
    	strcpy(stud[3].sex,"woman");
    	stud[3].age = 22;
    	stud[3].Chinese = 95;
    	stud[3].Math = 88;
    	stud[3].English = 89;
    	printf("输入后两个学生的信息(空格分隔,每行一人):\n\n");
    	printf("学号   姓名   性别   年龄   语文   数学   英语\n\n");
    	input(stud + 4);
    	input(stud + 5);
    	print_all(stud, 5);
    }
     
    

    代码调整如上,已经能够正常运行,万望采纳。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用
  • ¥15 C++ yoloV5改写遇到的问题
  • ¥20 win11修改中文用户名路径
  • ¥15 win2012磁盘空间不足,c盘正常,d盘无法写入
  • ¥15 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程