当前位置: 代码迷 >> .NET面试 >> C 结构体指针解决方案
  详细解决方案

C 结构体指针解决方案

热度:39   发布时间:2016-05-02 20:37:40.0
C 结构体指针
学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进行初始化。
  相关解决方案