c# 为什么不打印用户输入的年龄?

euoag5mw  于 2022-12-28  发布在  C#
关注(0)|答案(1)|浏览(200)

错误在哪里?,应该打印出用户输入的年龄给struct的student 0

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

struct Students
{
    int age;
    int id;
    char name[30];
    int grade;
};

void main(void)
{
    struct Students *student[10]; // Array of Pointers to Structs.
    // Containing (10) Pointers (student) to Structs. To save memory unlike the normal array
    printf("Enter your Age: ");
    scanf("%d", &student[0]->age);
    printf("Age equals: %d", student[0]->age);
}
5jdjgkvh

5jdjgkvh1#

您有一个指向Students结构体的10个 * 指针 * 的数组,但是每个指针都没有初始化。
因此,当您解引用这些指针中的任何一个时,就会调用未定义的行为。
您应该为每个指针动态分配内存,或者将数组更改为:

struct Students student[10];

这会自动为10个Students结构体分配堆栈空间。此时,您可以使用以下语句读取age:

scanf("%d", &student[i].age);

作为旁注,我认为你的复数形式是反的。如果你的结构体Students只包含一个学生的信息,那么Student会是一个更好的名字,students会是一个适合这些结构体数组的名字。
您还应该检查scanf的返回值。如果成功读取了单个整数,scanf将返回1。不要假设用户将输入有效信息。检查scanf的返回值可以让您选择在可能产生进一步运行时错误之前处理该情况。

相关问题