学C,遇到如下问题。就是理不清楚指针才用这个小程序来练习编程的。求助。
头文件:
- C/C++ code
#include <STDLIB.H>#include <STDIO.H>#define OK 0#define TRUE 1typedef struct student{ int num; //学号 char name[20]; //姓名 char sex; //性别 int age; //年龄 float score; //分数 char add[40]; //地址};typedef struct StudentNode{ struct student* stu_data; //学生的数据信息指针 struct StudentNode* next; //指向下一个结点的指针}StudentNode, *LinkStudentNode;//创建具有n个学生信息的链表int create_student_node_info(LinkStudentNode &stu_node, int n);
cpp文件
- C/C++ code
#include "student.h"void case1(LinkStudentNode &stu_node){ int n; printf("输入需要创建的学生信息的个数n:"); scanf("%d", &n); create_student_node_info(stu_node, n);}void case2(LinkStudentNode stu_node){ LinkStudentNode p; int i = 0; p = stu_node->next;//初始化p,使其指向第一个结点 if(p) { //如果p不为NULL //打印其数据 printf("第%d个学生信息:\n", i + 1); printf("学号:%d", p->stu_data->num); printf("姓名:%s", p->stu_data->name); printf("性别:%c", p->stu_data->sex); printf("年龄:%d", p->stu_data->age); printf("分数:%f", p->stu_data->score); printf("地址:%s", p->stu_data->add); p = p->next; i++; }}void main(){ int choice; LinkStudentNode stu_node; printf("1:创建具有n个学生信息的链表\n"); printf("2:打印所有学生信息\n"); printf("0:退出\n"); while(TRUE) { printf("请输入您的选择:"); scanf("%d", &choice); switch(choice) { case 0:exit(0);break; case 1:case1(stu_node);break; case 2:case2(stu_node);break; } } getchar();}//创建具有n个学生信息的链表int create_student_node_info(LinkStudentNode &stu_node, int n){ int i, nu; LinkStudentNode p; //给头指针stu_node分配内存空间 stu_node = (LinkStudentNode)malloc(sizeof(StudentNode)); stu_node->next = NULL; //将头结点指向NULL,建立带头结点的链表 for(i = n; i > 0; --i) { p = (LinkStudentNode)malloc(sizeof(StudentNode));//生成新结点 printf("输入一个学生信息\n"); //输入元素信息 printf("学号:"); scanf("%d", &p->stu_data->num); printf("\n姓名:"); scanf("%s", p->stu_data->name); printf("\n性别:");//注意此处性别是char型,默认其输入M为男,W为女吧 scanf("%c", &p->stu_data->sex); printf("\n年龄:"); scanf("%d", &p->stu_data->age); printf("\n分数:"); scanf("%f", &p->stu_data->score); printf("\n地址:"); scanf("%s", p->stu_data->add); //将当前指针指向NULL p->next = stu_node->next; //将当前结点插入到链表中 stu_node->next = p; } return OK;}
这个程序在create_student_node_info函数里面输入学号信息scanf("%d", &p->stu_data->num);的时候总是报错。我感觉我的理解就是p首先指向有学生信息的结构体指针。然后再指向里面的学号。这样怎么错了呢?
我编程很不给力现在在急赶!求大家帮我解释下!谢谢!
------解决方案--------------------
你的问题在于没有对p->stu_data进行初始化。