我刚刚开始学习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;
}
答案 0 :(得分:0)
必须通过结构变量访问结构的成员变量。在您的计划中,您尝试按其成员的名称访问这两个结构的成员(date
或date_t
&amp; student
或student_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
不是数组而是整数变量。
我认为这是你的问题。