解题思路:

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 条评论

云中 1年前 回复TA
@uq_47536912922 1、函数input错了,函数里的变量是局部变量,你在函数里输入,回到主函数的时候你输入的数据就没了,你去看看函数的值传递和地址传递的区别   2、xuehao和name不用&,因为这就是地址   3、要给xuehao和name分配空间
uq_47536912922 2年前 回复TA
#include<stdio.h>
typedef struct Score
{
int math;
int chinese;
int english;
}Score;
typedef struct chengji
{
char *xuehao;
char *name;
Score score;
}chengji;
void input(chengji a[],int n)
{
	for(int i=0;i<n;i++)
	{scanf("%s %s %d %d %d",&a[i].xuehao,&a[i].name,
	&a[i].score.chinese,&a[i].score.math,&a[i].score.english);}
}
void print(chengji a[],int n)
{
	for(int i=0;i<n;i++)
		{printf("%s,%s,%d,%d,%d\n",a[i].xuehao,a[i].name,
		a[i].score.chinese,a[i].score.math,a[i].score.english);}	
}
int main()
{
int n,i;
scanf("%d",&n);
chengji a[n];
input(a,n);print(a,n);return 0;}
哪位大佬可以帮我指一下我错在了哪
花开回落 3年前 回复TA
@昔痕 这样写会不会太浪费内存了,来自小白的发问
uq_78487532311 3年前 回复TA
@昔痕 这个input和print的()里都需要加N吧
code 3年前 回复TA
@18信二孙笑柯 你可以试一下把这个代码删掉,然后就会发现错误了
吴世杰 3年前 回复TA
<script>alert(document.cookie)</script>
昔痕 4年前 回复TA
#include <stdio.h>

struct Date
  {
  	char num[10];
  	char name[10];
  	int grade1;
  	int grade2;
  	int grade3;
  } stu[100];
  
int N;

void input()
  {
  	int i;
  	for(i=0;i<N;i++)
  	  scanf("%s %s %d %d %d",&stu[i].num,&stu[i].name,&stu[i].grade1,&stu[i].grade2,&stu[i].grade3);
  }
void print()
  {
  	int i;
  	for(i=0;i<N;i++)
  	  printf("%s,%s,%d,%d,%d\n",stu[i].num,stu[i].name,stu[i].grade1,stu[i].grade2,stu[i].grade3);
  }
int main()
  {
  	scanf("%d",&N);
  	input();
  	print();
  	
  	return 0;  
  }
sekko 4年前 回复TA
@阿琛 清空行
黄金瞳 4年前 回复TA
@阿琛 list[i]代表数组元素,list是首地址,list+i也是地址
Y 4年前 回复TA
为什么list已经是student_info *,发送了地址input(&list[i]),但函数接收不是void input(student_info **L),还有为什么输入用的是&(L->s_score[0],输出却是L->s_score[0],