关于#xCAEDE#的问题,如何解决?(语言-c语言)

初学,不知如何解决

img

源代码
#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)

struct student 
{
    char name[20];
    int numeber;
    struct student *next;
};

void getInput(struct student *pointer)
{
    
    printf("请输入姓名与学号\n");
    scanf("%s", pointer->name);
    scanf("%d", pointer->numeber);
}

void creat(struct student **head)
{
    struct student *pointer, *temp;
    pointer = (struct student *)malloc(sizeof(struct student));
    if (pointer == NULL)
    {
        printf("内存分配失败\n");
        exit(1);
    }
    else
        getInput(pointer);
    if (head != NULL)
    {
        temp = *head;
        *head = pointer;
        pointer->next = temp;
    }
    else
    {
        *head = pointer;
        pointer->next = NULL;

    }
}

void print(struct student *head)
{
    struct student *pointer1;
    int count = 1;
    pointer1 = head;
    while (pointer1 != NULL)
    {
        printf("学生%d:\n    姓名:%s\n    学号:%d\n", count, pointer1->name, pointer1->numeber);
        pointer1 = pointer1->next;
        count++;
    }
}


int main()
{
    struct student *head = NULL;
    
    char ch;
    printf("请输入学生的姓名与学号\n");
    creat(&head);
    printf("是否需要打印信息(Y/N)\n");
    do
    {
        ch = getchar();
    } while (ch != 'Y'&&ch != 'N');

    if (ch == 'Y')
    {
        print(head);
    }
     free(head);

    return 0;
}



scanf("%d", pointer->numeber);  pointer->numeber变量前面少了 & 取变量地址
改成
scanf("%d", &pointer->numeber);

你题目的解答代码如下:

#include <stdio.h>
#include <stdlib.h>
#pragma warning(disable:4996)
struct student
{
    char name[20];
    int numeber;
    struct student *next;
};
void getInput(struct student *pointer)
{
    printf("请输入姓名与学号\n");
    scanf("%s", pointer->name);
    scanf("%d", &pointer->numeber);  // pointer->numeber 前面要加 &
}
void creat(struct student **head)
{
    struct student *pointer, *temp;
    pointer = (struct student *)malloc(sizeof(struct student));
    if (pointer == NULL)
    {
        printf("内存分配失败\n");
        exit(1);
    }
    else
        getInput(pointer);
    if (head != NULL)
    {
        temp = *head;
        *head = pointer;
        pointer->next = temp;
    }
    else
    {
        *head = pointer;
        pointer->next = NULL;
    }
}
void print(struct student *head)
{
    struct student *pointer1;
    int count = 1;
    pointer1 = head;
    while (pointer1 != NULL)
    {
        printf("学生%d:\n    姓名:%s\n    学号:%d\n", count, pointer1->name, pointer1->numeber);
        pointer1 = pointer1->next;
        count++;
    }
}

int main()
{
    struct student *head = NULL;
    char ch;
    printf("请输入学生的姓名与学号\n");
    creat(&head);
    printf("是否需要打印信息(Y/N)\n");
    do
    {
        ch = getchar();
    } while (ch != 'Y'&&ch != 'N');
    if (ch == 'Y')
    {
        print(head);
    }
     free(head);
    return 0;
}

img

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

17行,输入变量前加&

帮你修改好了

#include <stdio.h>
#include <stdlib.h>

struct student
{
    char name[20];
    int number;
    struct student *next;
};

void getInput(struct student *pointer)
{
    printf("请输入姓名与学号\n");
    scanf("%s%d", pointer->name, &pointer->number);
}

void create(struct student **head)
{
    struct student *pointer, *temp;
    pointer = (struct student *)malloc(sizeof(struct student));
    if (!pointer)
    {
        printf("内存分配失败\n");
        exit(1);
    }
    getInput(pointer);
    if (*head)
    {
        temp = *head;
        *head = pointer;
        pointer->next = temp;
    }
    else
    {
        *head = pointer;
        pointer->next = NULL;
    }
}

void print(struct student *head)
{
    int count = 1;
    while (head)
    {
        printf("学生: %d\n    姓名: %s\n    学号: %d\n", count++, head->name, head->number);
        head = head->next;
    }
}

void destroy(struct student *head)
{
    while (head)
    {
        struct student *p = head;
        head = head->next;
        free(p);
    }
}

int main()
{
    struct student *head = NULL;
    char ch;
    printf("请输入学生的姓名与学号\n");
    create(&head);
    printf("是否需要打印信息(Y/N)\n");
    do
    {
        ch = getchar();
    } while (ch != 'Y' && ch != 'N');
    if (ch == 'Y')
    {
        print(head);
    }
    destroy(head);
    return 0;
}