a327904410 发表于 2021-10-26 13:19:51

为什么输出会乱码

一个学生管理系统
输入 1 张三 60 90 50

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

typedef struct Student {
        int num;
        char name;
        float chinese;
        float math;
        float english;
};

typedef struct node {
        struct Student data;
        struct node* next;
}StudentList;

StudentList* InitList() {    // 初始化单链表
        StudentList* L;
        L = (StudentList*)malloc(sizeof(StudentList));
        L->next = NULL;
}

int InsElem(StudentList* L, struct Student data, int i) {    // 插入元素
        int j = 0;
        StudentList* p = L, * s;
        while (p != NULL && j < i - 1) {
                j++;
                p = p->next;
        }
        if (p == NULL) {
                return 0;
        }
        else {
                s = (StudentList*)malloc(sizeof(StudentList));
                s->data = data;
                s->next = p->next;
                p->next = s;
                return 1;
        }
}

void DispList(StudentList *L) {   // 输出元素
        StudentList* p = L->next;
        while (p) {
                float avg = (p->data.chinese + p->data.math + p->data.english) / 3;
                printf("%d\t%s\t%f\n", p->data.num, p->data.name, avg);
                p = p->next;
        }
}

void main() {
        StudentList* L;
        L = InitList();
        struct Student info;
        printf("请输入学生的学号,姓名,语文成绩,数学成绩,英语成绩\n");
        int i;
        scanf("%d, %s, %f, %f, %f\n", &info.num, &info.name, &info.chinese, &info.math, &info.english);
        InsElem(L, info, 1);
        DispList(L);
}

a327904410 发表于 2021-10-26 13:20:24

输出是 学号 姓名 平均成绩

Gacy 发表于 2021-10-26 13:24:20

数据结构 头疼{:10_266:}

a327904410 发表于 2021-10-26 13:40:15

Gacy 发表于 2021-10-26 13:24
数据结构 头疼

是很难,不过都选C了,不学好真的对不起自己

Gacy 发表于 2021-10-26 14:09:31

a327904410 发表于 2021-10-26 13:40
是很难,不过都选C了,不学好真的对不起自己

{:10_254:}上学期学这个差点没了{:10_266:}

村里小黑 发表于 2021-10-26 14:50:42

蹲个大佬来解答,记得替我一脚,学术不精啊{:10_266:},应该是指针那里出了问题,但是又分析不出来{:10_272:}(也有可能分析错了)。

人造人 发表于 2021-10-26 15:16:30

村里小黑 发表于 2021-10-26 14:50
蹲个大佬来解答,记得替我一脚,学术不精啊,应该是指针那里出了问题,但是又分析不出来{:10_272 ...

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

//typedef struct Student {
struct Student {
      int num;
      char name;
      float chinese;
      float math;
      float english;
};

typedef struct node {
      struct Student data;
      struct node *next;
} StudentList;

StudentList* InitList() {    // 初始化单链表
      StudentList* L;
      //L = (StudentList*)malloc(sizeof(StudentList));
      L = malloc(sizeof(StudentList));
      L->next = NULL;

      return L;
}

int InsElem(StudentList* L, struct Student data, int i) {    // 插入元素
      int j = 0;
      StudentList *p = L, *s;
      while (p != NULL && j < i - 1) {
                j++;
                p = p->next;
      }
      if (p == NULL) {
                return 0;
      }
      else {
                //s = (StudentList*)malloc(sizeof(StudentList));
                s = malloc(sizeof(StudentList));
                s->data = data;
                s->next = p->next;
                p->next = s;
                return 1;
      }
}

void DispList(StudentList *L) {   // 输出元素
      StudentList* p = L->next;
      while (p) {
                float avg = (p->data.chinese + p->data.math + p->data.english) / 3;
                printf("%d\t%s\t%f\n", p->data.num, p->data.name, avg);
                p = p->next;
      }
}

//void main() {
int main(void) {
      StudentList* L;
      L = InitList();
      struct Student info;
      printf("请输入学生的学号,姓名,语文成绩,数学成绩,英语成绩\n");
      //int i;
      //scanf("%d, %s, %f, %f, %f\n", &info.num, &info.name, &info.chinese, &info.math, &info.english);
      scanf("%d%s%f%f%f", &info.num, info.name, &info.chinese, &info.math, &info.english);
      InsElem(L, info, 1);
      DispList(L);

      return 0;
}

村里小黑 发表于 2021-10-26 16:21:01

人造人 发表于 2021-10-26 15:16


主要是因为初始化单链表之后没有返回指针?

人造人 发表于 2021-10-26 16:34:19

村里小黑 发表于 2021-10-26 16:21
主要是因为初始化单链表之后没有返回指针?

这个问题不好回答,我感觉没有 “主要” 这么一说
代码中任何一个字母错了都不行
我感觉不能说这个字母错的比那个字母主要

代码中的问题我都是注释了原来的代码,然后改的,当然还有添加的内容

村里小黑 发表于 2021-10-26 16:47:59

人造人 发表于 2021-10-26 16:34
这个问题不好回答,我感觉没有 “主要” 这么一说
代码中任何一个字母错了都不行
我感觉不能说这个字母 ...

但是我觉得L = (StudentList*)malloc(sizeof(StudentList));这一句没啥问题啊,
申请空间后返回一个void指针赋值给Students型指针L和返回转换成Students型指针在赋值给Students型指针L都没问题吧

村里小黑 发表于 2021-10-26 17:00:27

村里小黑 发表于 2021-10-26 16:47
但是我觉得L = (StudentList*)malloc(sizeof(StudentList));这一句没啥问题啊,
申请空间后返回一个void ...

我明白了,我确实是有一些犯二了,感谢大佬赐教,以后我也多注意这些细节{:10_265:}

村里小黑 发表于 2021-10-26 17:01:15

人造人 发表于 2021-10-26 16:34
这个问题不好回答,我感觉没有 “主要” 这么一说
代码中任何一个字母错了都不行
我感觉不能说这个字母 ...

我明白了,我确实是有一些犯二了,感谢大佬赐教,以后我也多注意这些细节{:10_265:}

人造人 发表于 2021-10-26 17:47:24

村里小黑 发表于 2021-10-26 16:47
但是我觉得L = (StudentList*)malloc(sizeof(StudentList));这一句没啥问题啊,
申请空间后返回一个void ...

C语言中不需要这个转换,没有任何必要

a327904410 发表于 2021-10-26 18:08:57

人造人 发表于 2021-10-26 15:16


看了你的代码后我知道我哪里错了,是输入格式错了,明明里面有逗号隔开我还用空格隔开,我真是个大傻逼。{:10_250:}不过还是谢谢你帮我改了下代码,学习了

a327904410 发表于 2021-10-26 18:09:29

jackz007 发表于 2021-10-26 16:03
编译、运行实况:

感谢,辛苦了{:10_298:}

a327904410 发表于 2021-10-26 18:10:51

村里小黑 发表于 2021-10-26 16:21
主要是因为初始化单链表之后没有返回指针?

知道哪里错了,代码没错,是我的输入格式错了。输入里面用逗号隔开的,而我用空格隔开,导致输出结果乱码。{:10_266:}
页: [1]
查看完整版本: 为什么输出会乱码