具有未声明变量的Typedef结构

时间:2017-04-30 12:55:39

标签: c variables

我刚刚开始学习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;
}

1 个答案:

答案 0 :(得分:0)

必须通过结构变量访问结构的成员变量。在您的计划中,您尝试按其成员的名称访问这两个结构的成员(datedate_t&amp; 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不是数组而是整数变量。

我认为这是你的问题。