Pointers 尝试使用指针将函数中的值扫描到结构中的结构

Pointers 尝试使用指针将函数中的值扫描到结构中的结构,pointers,struct,Pointers,Struct,请看一下代码,全部都说出来了 #include<stdio.h> #include<string.h> struct DOB { int y,m,d; }typedef DOB_t; struct Courses { char* NameofCourse; char* Lec; int CourseID; }typedef Course_t; struct Student { char Name[20]; float Grade; DOB_t dob; Cours

请看一下代码,全部都说出来了

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

struct DOB
{
int y,m,d;
}typedef DOB_t;

struct Courses
{
char* NameofCourse;
char* Lec;
int CourseID;

}typedef Course_t;

struct Student
{
char Name[20];
float Grade;
DOB_t dob;
Course_t Courses;

}typedef Student_t;

void addstudent(Student_t* s);
void addDate(DOB_t* dob);
void addCourse(Course_t* c);

main()
{
int opt;
Student_t s;
printf("Please choose one of the options:\n");
printf("<<<<<1.add student>>>>>\n<<<<<2.print student>>>>>\n");
scanf("%d",&opt);
switch(opt)
    case 1:
{
    addstudent(&s);
    break;
}

}

void addstudent(Student_t* s)
{
printf("Enter student's name: ");
scanf("%s",s->Name);
printf("Enter Grade: ");
scanf("%.2f",s->Grade);
printf("Enter DateOfBirth: ");
***addDate(&(s->dob));***
addCourse(&(s->Courses));
}

void addDate(DOB_t* dob)
{
***scanf("%d %d %d", dob->d,dob->m,dob->y);***
}

void addCourse(Course_t* c)
{
printf("Enter Course Name And Lec Name: ");
scanf("%s %s",c->NameofCourse,c->Lec);
printf("Enter Course ID: ");
scanf("%d",c->CourseID);
}
#包括
#包括
结构DOB
{
int y,m,d;
}类型定义DOB_t;
结构课程
{
字符*当然的名称;
char*Lec;
int CourseID;
}类型定义课程;
体类型
{
字符名[20];
浮子等级;
DOB_t DOB;
课程;;
}typedef学生;
无效添加学生(学生);
无效添加日期(DOB_t*DOB);
无效添加课程(课程_t*c);
main()
{
int-opt;
学生;
printf(“请选择下列选项之一:\n”);
printf(“\n\n”);
scanf(“%d”和&opt);
开关(opt)
案例1:
{
addstudent(s&s);
打破
}
}
无效添加学生(学生)
{
printf(“输入学生姓名:”);
scanf(“%s”,s->Name);
printf(“输入等级:”);
scanf(“%.2f”,s->Grade);
printf(“输入出生日期:”);
***添加日期(&(s->dob))***
添加课程(&(s->课程));
}
无效添加日期(截止日期)
{
***扫描频率(“%d%d%d”,dob->d,dob->m,dob->y)***
}
无效添加课程(课程*c)
{
printf(“输入课程名称和Lec名称:”);
scanf(“%s%s”,c->name of course,c->Lec);
printf(“输入课程ID:”);
scanf(“%d”,c->CourseID);
}
它还没有完成,但看看突出显示的行-我在尝试使用指针(s->DOB)扫描DateofBirth的值以在函数关闭后将数据保留在值中时出错。
希望您理解我的问题。

scanf
要求您传递要存储结果的内存空间的地址。在函数中,无论在何处传递指向结构的指针,都应该像这样使用
scanf

void addDate(DOB_t* dob)
{
scanf("%d %d %d", &dob->d,&dob->m,&dob->y); //This would read an integer into the address of pointer plus the offset of member into the structure.
}

您已经在将值读入结构指针的每个位置对代码进行了此更改。

谢谢!这真的很有帮助,一切都很好,直到我不知从哪里得到了很多错误: