https://pintia.cn/problem-sets/14/problems/814
简单输入输出结构体问题
题目:
输入:
输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15位的连续数字,前面有可能出现+。
在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。
输出:
对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <stdbool.h>
int main()
{
struct ifmt
{
char name[20];
char birth[20];
char sex[10];
char tel[20];
char num[20];
};
int n,sum,b[10]={-1};
scanf("%d",&n);
struct ifmt a[n];
int i ;
for(i = 0; i < n; i++)
{
scanf("%s %s %s %s %s\n",&a[i].name,&a[i].birth,&a[i].sex,&a[i].tel,&a[i].num);
}
scanf("%d",&sum);
for(i = 0;i < sum; i++)
{
scanf("%d",&b[i]);
}
for(i = 0; i < sum; i++)
{
if(b[i]>=0&&b[i]<n)
printf("%s %s %s %s %s",a[b[i]].name,a[b[i]].tel,a[b[i]].num,a[b[i]].sex,a[b[i]].birth);
else
printf("Not Found");
if(i!=sum-1)
printf("\n");
}
return 0;
}
注意每条记录中的每个信息的长度
输入字符串用 %s 即可,随后存储于数组中。
scanf("%s %s %s %s %s\n",&a[i].name,&a[i].birth,&a[i].sex,&a[i].tel,&a[i].num);
输出字符串类似
printf("%s %s %s %s %s",a[b[i]].name,a[b[i]].tel,a[b[i]].num,a[b[i]].sex,a[b[i]].birth);
在一个就是结构体数组中的个数可以用scanf的值来表示。