【问题标题】:Why is my array of structures not working?为什么我的结构数组不起作用?
【发布时间】:2021-02-23 20:55:42
【问题描述】:

How to do question 2?

  1. 编写一个程序,定义一个结构 student 来保存学生的以下信息: 姓氏,其他名字,地址,年龄。该程序应具有以下功能:  一个函数 inputStudent(),它将一个学生结构作为参数并允许输入 存储在 struct 参数中的数据。  一个函数 displayStudent(),它将一个学生结构作为参数并显示 屏幕上的属性值。 该程序应声明两个学生类型的变量,允许为两个学生输入数据,并且 将它们存储在这些变量中。然后程序应显示较旧的姓名和地址 两人之中的学生。如果他们年龄相同,程序应显示姓名和 他们两个的地址。
  2. 修改问题 2 中的程序,使 main() 函数声明一个大小为 20 的数组 struct student,允许输入一个整数值 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,50,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;
}

【问题讨论】:

  • i &lt; 20 应该是i &lt; n -- 这不是你要求n 的原因吗?
  • 在循环结束之前,您无法知道学生是否最小。您显示的是所有 100 岁以下的学生,而不是最年轻的学生。
  • 好的,所以你“有错误”。你有没有尝试阅读它们?您是否试图弄清楚他们指的是代码的哪一部分?您是否尝试将这些错误消息的文本放入搜索引擎?您是否尝试在 Stack Overflow 上查找有关这些错误消息的其他问题?

标签: arrays c pointers structure


【解决方案1】:

您应该只输入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]);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 2012-03-27
    • 2011-12-04
    • 1970-01-01
    • 2013-08-24
    • 1970-01-01
    相关资源
    最近更新 更多