解题思路:

1、使用结构体指针存储学生信息

2、输入数据长度后使用malloc分配存储空间

注意事项:

参考代码:

#include<stdio.h>
#include<malloc.h>

typedef struct _student_info_
{
	char s_id[16];        //学号
	char s_name[32];      //姓名
	int s_score[3];       //三科成绩
}student_info;

void input(student_info *L)
{
	scanf("%s %s %d %d %d", L->s_id, L->s_name, &(L->s_score[0]), &(L->s_score[1]), &(L->s_score[2]));
}

void print(student_info *L)
{
	printf("%s,%s,%d,%d,%d\n", L->s_id, L->s_name, L->s_score[0], L->s_score[1], L->s_score[2]);
}

int main()
{
	student_info *list;
	int n = 0, i = 0;
	scanf("%d", &n);
	while(getchar() != '\n')
		continue;

	if(n > 0 && n < 100)
		list = (student_info *)malloc(sizeof(student_info)*n);
	else
		return 0;
	for(i = 0; i < n; i++)
	{
		input(&list[i]);
		//一行一行获取,忽略一行多余的数据
		while(getchar() != '\n')
			continue;
	}
	for(i = 0; i < n; i++)
	{
		print(&list[i]);
	}
	free(list);
	return 0;
}


点赞(13)
 

0.0分

50 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 37 条评论

天青色 4年前 回复TA
@阿琛 (个人小白理解)调用的函数是void input(student_info *L),圆括号内是指针,地址传递,所以取地址
阿琛 4年前 回复TA
input(&list[i]); 为什么这里要加&,list[i]不是代表地址吗
阿琛 4年前 回复TA
为什么要写
while(getchar() != '\n')
        continue;
葡萄 4年前 回复TA
@葡萄 @uq_97086515507 谢谢哥们!
cuzz,rank的神 4年前 回复TA
@葡萄 这里*是乘的意思,这句话应该是向内存申请n个student_info_结构体类型的空间。
葡萄 4年前 回复TA
list = (student_info *)malloc(sizeof(student_info)*n);
请问最后的指针n是什么意思?
tw 5年前 回复TA
#include<stdio.h>
#include<stdlib.h>
struct chengji {
	int yuwen;
	int shuxue;
	int yingyu;
};
typedef struct {
	char xuehao[20];
	char xingmin[50];
	struct chengji temp;
}temp1;

int main()
{
	temp1* array;
	int n;
	scanf("%d",&n);
	array = (temp1*)calloc(n, sizeof(temp1));
	for (int i = 0; i < n; i++)
		scanf("%s%s%d%d%d",&array[i].xuehao, &array[i].xingmin, &array[i].temp.shuxue, &array[i].temp.yingyu, &array[i].temp.yuwen);
	for (int i = 0; i < n; i++)
		printf("%s,%s,%d,%d,%d\n", array[i].xuehao, array[i].xingmin, array[i].temp.shuxue, array[i].temp.yingyu, array[i].temp.yuwen);
	return 0
零K沁雪 5年前 回复TA
@月亮先生丶 list 只是指针的首地址,本题中 list 指向的内存地址后存在连续的多个student_info,使用 list[i]可以精确的指向每一个 student_info
18信二孙笑柯 5年前 回复TA
我感觉两个这个
while(getchar() != '\n')
        continue;
有没有都一样
月亮先生丶 5年前 回复TA
为啥定义的list指针,却可以使用 list【i】呢