《算法笔记》2.8小节——C/C++快速入门->结构体(struct)的使用->问题 B: C语言11.2(oj:Codeup墓地)(使用指向结构体数组的指针进行输入和输出)

版权声明:关中大侠Lv轻侯 https://blog.csdn.net/weixin_44312186/article/details/86572345

题目描述

定义一个结构体student,存储学生的学号、名字、性别和年龄,读入每个学生的所有信息,保存在结构体中,并输出。结构体student的定义如下:
struct student {
    int num;
    char name[20];
    char sex;
    int age;
};
本题要求使用指向结构体数组的指针进行输入和输出。

输入

第一行有一个整数n,表示以下有n个学生的信息将会输入。保证n不大于20。
以后的n行中,每一行包含对应学生的学号、名字、性别和年龄,用空格隔开。保证每一个人名都不包含空格且长度不超过15,性别用M和F两个字符来表示。

输出

有n行,每行输出一个学生的学号、名字、性别和年龄,用空格隔开。
请注意行尾输出换行。

样例输入

3
10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20

样例输出

10101 LiLin M 18
10102 ZhangFun M 19
10104 WangMin F 20

参考代码(有点问题但在oj上可以通过): 

#include<stdio.h>
#include<string.h>

struct student {
    int num;
    char name[20];
    char sex;
    int age;
}stu[20];

int main()
{
	int n;
	scanf("%d",&n);
	struct student *p;
	if(n>=0&&n<=20)
	{
		for(p=stu; p<stu+n; p++)
		{
			scanf("%d%s%s%d",&(p->num),&(p->name),&(p->sex),&(p->age));	
            //ps:scanf里的p->sex必须为%s
		}
            
		for(p=stu; p<stu+n; p++)
		{
			printf("%d %s %c %d\n",p->num,p->name,p->sex,p->age);
           //ps:printf里的p->sex必须为%c
		}

		printf("\n");
	}
	return 0;
}

 ps:输入输出有还有点不太明白,为什么scanf里的p->sex必须为%s,而printf里的p->sex必须为%c才能通过?

          若有大佬有幸看到这篇文章,还望指教!!!


修改后代码:

#include<stdio.h>
#include<string.h>

struct student {
    int num;
    char name[20];
    char sex;
    int age;
}stu[20];

int main()
{
	int n;
	scanf("%d",&n);
	struct student *p;
	if(n>=0&&n<=20)
	{
		for(p=stu; p<stu+n; p++)
		{
			scanf("%d %s %c %d",&(p->num),p->name,&(p->sex),&(p->age));			
		}
		for(p=stu; p<stu+n; p++)
		{
			printf("%d %s %c %d\n",p->num,p->name,p->sex,p->age);
		}
		printf("\n");
	}
	return 0;
}

ps:当使用scanf进行结构体数组输入时,应当注意字符串类型不需要加取符&。


猜你喜欢

转载自blog.csdn.net/weixin_44312186/article/details/86572345