gpt4 book ai didi

c - 带有未声明变量的 Typedef 结构

转载 作者:行者123 更新时间:2023-11-30 14:57:43 25 4
gpt4 key购买 nike

我刚刚开始学习 C 几周,一直在尝试熟悉结构,但无济于事。我目前被这段代码困住了。我不明白为什么我的程序没有获取变量。程序末尾有一个 printf() 函数,由于不相关,我尚未将其放入。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_SIZE 11
typedef struct date {
int day;
int month;
int year;
} date_t;
typedef struct student{
char name[MAX_NAME_SIZE];
float gpa;
date_t birthday;
} student_t;

int main(void)
{
student_t student;
date_t date;
printf("Enter name>");
scanf("%s", &name);
printf("Enter birthday: day>");
scanf("%d", &day);
if (day <1 ||day >31){
printf("Invalid day. Enter birthday: day>");
scanf("%d", &day);
}
printf("Enter birthday: month>");
scanf("%d", &month);
if (month< 1 || month >12){
printf("Invalid month. Enter birthday:>");
scanf("%d", &month);
}
printf("Enter birthday: year>");
scanf("%d", &year);
if (year >2017 || year<1900){
printf("Invalid year. Enter birthday: year>");
scanf("%d", &year);
}
printf("Enter GPA>");
scanf("%4f", &gpa);
if (gpa <0 || gpa > 4){
printf("Invalid GPA. Enter GPA>");
scanf("%4f", &gpa);
}

return 0;
}

最佳答案

结构体的成员变量必须通过结构体变量来访问。在您的程序中,您尝试访问两个结构的成员(datedate_t & studentstudent_t)通过其成员的名称而不是使用其结构变量。例如:

student_t student;
date_t date;
printf("Enter name>");
scanf("%s", &name);

错误。

student_t student;
date_t date;
printf("Enter name>");
scanf("%s", student.name);
应使用

代替。另外,由于 name 是一个字符数组(或字符串),因此您需要在 scanf() 中使用 & 作为数组本身的名称返回其基址。通过将地址提供给 scanf(),您就告诉它应存储读取值的地址。

同样,

printf("Enter birthday: day>");
scanf("%d", &day);
if (day <1 ||day >31){
printf("Invalid day. Enter birthday: day>");
scanf("%d", &day);
}

应该是

printf("Enter birthday: day>");
scanf("%d", &date.day);
if (date.day <1 ||date.day >31){
printf("Invalid day. Enter birthday: day>");
scanf("%d", &date.day);
}

此处,需要 & 运算符,因为 date.day 不是数组而是整型变量。

我认为这是你的问题。

关于c - 带有未声明变量的 Typedef 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com