为什么我的一系列结构不起作用?

问题描述

How to do question 2?

  1. 编写一个程序,该程序定义结构学生以保存学生的以下信息: 姓,其他名字,地址,年龄。该程序应具有以下功能: 函数inputStudent(),它以学生结构作为参数并允许输入 存储在struct参数中的数据。 函数displayStudent(),它以学生结构作为参数并显示 屏幕上的属性值。 该程序应声明两个学生类型的变量,允许输入两个学生的数据,并且 将它们存储在这些变量中。然后,程序应显示较旧的名称和地址 两个学生之间。如果年龄相同,则程序应显示名称和 他们两个的地址。
  2. 修改问题2的程序,以便main()函数声明大小为20的数组。 struct学生,允许输入整数n,并为n个学生执行数据输入, 然后将它们显示回来。然后,程序应显示姓名,住所和年龄 数组中最年轻的学生。如果有几个年龄最小的学生,该计划将 仅显示一个

我在Question2上遇到问题。我创建了一个结构数组,但有错误,我不知道如何纠正它们。 我犯了什么错误?请帮忙。谢谢。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct student{
    char surname[50];
    char otherNames[70];
    char addr[50];
    int age;

};
struct student inputStudent(struct student *s){

    printf("Enter surname: ");
    fgets(s->surname,50,stdin);

    printf("Enter other names: ");
    fgets(s->otherNames,70,stdin);

    printf("Enter address: ");
    fgets(s->addr,stdin);

    printf("Enter age: ");
    scanf("%d",&s->age);
    getchar();
    printf("\n");

}

void displayStudent(struct student *s){
    printf("Surname: %s",s->surname);
    printf("Other names: %s",s->otherNames);
    printf("Address: %s ",s->addr);
    printf("\n");
}
int main()
{
   
    struct student c[20];
    int n;

    printf("Enter a number: ");
    scanf("%d",&n);

    for(int i=0;i<20;i++){
        intputStudent(&c);
    }
    int youngest =100;

    for(int i=0;i<20;i++){
        if(c[i].age < youngest){
            displayStudent(&c[i]);
        }
    }

    return 0;
}

解决方法

您应该只输入n个学生,而不要输入20。您只需将数组中当前学生的地址传递给inputStudent(),而不是整个数组的地址。

然后将它们全部输入后,您需要找到年龄最小的学生的索引。您正在打印每个100岁以下的学生。

    for(int i=0;i<n;i++){
        intputStudent(&c[i]);
    }
    int youngest = c[0].age;
    int youngest_index = 0;

    for(int i=1;i<n;i++){
        if(c[i].age < youngest){
            youngest = c[i].age;
            youngest_index = i;
        }
    }
    displayStudent(c[youngest_index]);