解题思路:

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

p0p08 5年前 回复TA
@jjstudyc 要加头文件string.h
C杯 5年前 回复TA
@君莫笑 学号是a开头的,肯定不能
小雨 5年前 回复TA
&(L->s_score[0])前面可以不加&吗,L->s_score[0]不就表示score[0]的地址吗
君莫笑 5年前 回复TA
为什么学号不能定义为int型
jjstudyc 5年前 回复TA
@阿啸 函数里面的stu1和 外层的stu1 可以互相传递信息??
jjstudyc 5年前 回复TA
编译没报错,运行错误,这么回事呀,求大神看看,解释一下好不
#include<stdio.h>

struct student_information
{ 
	char student_id[16];
	char student_name[16];
    int chinese;
	int mathematics;
	int english;
};

void input(struct student_information * p,int stu_num)
{    int i;
     for(i=0;i<stu_num;i++)
         scanf("%s %s %d %d %d",
			  (p+i)->student_id,(p+i)->student_name, 
			  &(p+i)->chinese,&(p+i)->mathematics,&(p+i)->english);   
}
 

void print(struct student_information *p,int std_num)
{   
	int i;
	for(i=0;i<std_num;i++)
        printf("%s,%s,%d,%d,%d",p[i].student_id,p[i].student_name,
		        p[i].chinese,
6年前 回复TA
哪里错啊
#include "stdio.h"
#include "malloc.h"
typedef struct Student
{
	char id[10];
	char a[10];
	int ch;
	int ma;
	int en;
}Student;
void input(int n,Student *li)
{
	int i;
	for(i=0;i<n;i++)
	{
		scanf("%s %s %d %d %d",&li->id,&li->a,&li->ch,&li->ma,&li->en);
	}
}
void print(Student *li)
{
	printf("%s,%s,%d,%d,%d\n",li->id,li->a,li->ch,li->ma,li->en);
}
void main()
{
	Student *list;
    int n,i;
    scanf("%d",&n);
    if(n>0&&n<100)
        list = (Student *)malloc(sizeof(Student)*n);
    for(i=0;i<n;i++)
    {
    	input(n,&list[i]);
    }
    for(i=0;i<n;i++)
    {
    	print(&list[i]);
6年前 回复TA
@弈 我的是这样#include "stdio.h" #include "malloc.h" typedef struct Student { 	char id[10]; 	char a[10]; 	int ch; 	int ma; 	int en; }Student; void input(int n,Student *li) { 	int i; 	for(i=0;i<n;i++) 	{ 		scanf("%s %s %d %d %d",&li->id,&li->a,&li->ch,&li->ma,&li->en); 	} } void print(Student *li) { 	printf("%s,%s,%d,%d,%d\n",li->id,li->a,li->ch,li->ma,li->en); } void main() { 	Student *list;     int n,i;     scanf("%d",&n);     if(n>0&&n<100)         list = (Student *)malloc(sizeof(Student)*n);     for(i=0;i<n;i++)     {     	input(n,&list[i]);     }     for(i=0;i<n;i++)     {     	print(&list[i]);     }     free(list); }
6年前 回复TA
请问while(getchar() != '\n')
        continue;
这两行具体有什么作用,可以不加吗?
豆豆哦 6年前 回复TA
@豆豆哦 补充void main(){ 	int n; 	scanf("%d",&n); 	print(input(n)); }