问下大家这怎么做呢?

试题详情:

有5个学生,每个学生的数据包括:学号(字符数组型)、姓名(字符数组型)、C语言成绩(整型),编写程序先从键盘上输入学生们的数据,再输入一个学生的学号,要求输出该学号对应的学生信息,未找到该学生时输出not found。
输入提示:

输入仅6行,前5行输入5个学生的学号、姓名、C语言成绩,要求数据之间用空格隔开。第6行输入一个学号信息。
输出提示:

输出仅一行,输出学号对应的学生信息或not found (两单词中间有一空格)。
输入样本:

111 yi 89
222 er 87
333 san 98
444 si 90
555 wu 56
333
输出样本:

333 san 98

img

#include<stdio.h>
#include<string.h>
#define BUF_SIZE 256
typedef struct
{
    char id[BUF_SIZE];
    char name[BUF_SIZE];
    int score;
}student_t;

int main()
{
#define NUM_STUDENTS 5
    student_t students[NUM_STUDENTS];
    for (int i = 0; i < NUM_STUDENTS; ++i)
    {
        scanf("%s %s %d", students[i].id, students[i].name, &students[i].score);
    }

    char id[BUF_SIZE];
    scanf("%s", id);
    for (int i = 0; i < NUM_STUDENTS; ++i)
    {
        if (strcmp(students[i].id, id) == 0)
        {
            printf("%s %s %d\n", students[i].id, students[i].name, students[i].score);
            return 0;
        }
    }
    printf("not found\n");
}

思路:

  1. 写一个结构体,成员是学号、姓名、成绩
  2. 使用结构体构建一个数组
  3. 输入数据,放入到数组中
  4. 根据输入的学号,匹配数组,查找到对应的结构体,并输出

最简单的方法就是定义二维数组,第一个下标表示第几位学生,第二个下标表示他的学号,姓名等,通过对下标的遍历。就可以了。还有一种方法就是构建链表或者顺序表。


#include<stdio.h>
#include<string.h>
const int SIZE = 20;
typedef struct Student
{
    char Sno[SIZE]={};
    char Sname[SIZE]={};
    int grade;
};

int main()
{
    Student s[5];
    for (int i = 0; i < 5; ++i)
    {
        scanf("%s", s[i].Sno);
        scanf("%s", s[i].Sname);
        scanf("%d", &s[i].grade);
        
    }
    
    char adjust[20];
    scanf("%s", adjust);
    for (int i = 0; i < 5; ++i)
    {
        if (strcmp(adjust, s[i].Sno)==0)
        {
            printf("%s %s %d", s[i].Sno, s[i].Sname, s[i].grade);
            return 0;
        }
    }
    printf("not found");
    return 0;
}

太久没用c的输入输出了,好麻烦

img

img