为什么输出会乱码
一个学生管理系统输入 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);
} 输出是 学号 姓名 平均成绩 数据结构 头疼{:10_266:} Gacy 发表于 2021-10-26 13:24
数据结构 头疼
是很难,不过都选C了,不学好真的对不起自己 a327904410 发表于 2021-10-26 13:40
是很难,不过都选C了,不学好真的对不起自己
{:10_254:}上学期学这个差点没了{:10_266:} 蹲个大佬来解答,记得替我一脚,学术不精啊{:10_266:},应该是指针那里出了问题,但是又分析不出来{:10_272:}(也有可能分析错了)。 村里小黑 发表于 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 15:16
主要是因为初始化单链表之后没有返回指针? 村里小黑 发表于 2021-10-26 16:21
主要是因为初始化单链表之后没有返回指针?
这个问题不好回答,我感觉没有 “主要” 这么一说
代码中任何一个字母错了都不行
我感觉不能说这个字母错的比那个字母主要
代码中的问题我都是注释了原来的代码,然后改的,当然还有添加的内容
人造人 发表于 2021-10-26 16:34
这个问题不好回答,我感觉没有 “主要” 这么一说
代码中任何一个字母错了都不行
我感觉不能说这个字母 ...
但是我觉得L = (StudentList*)malloc(sizeof(StudentList));这一句没啥问题啊,
申请空间后返回一个void指针赋值给Students型指针L和返回转换成Students型指针在赋值给Students型指针L都没问题吧 村里小黑 发表于 2021-10-26 16:47
但是我觉得L = (StudentList*)malloc(sizeof(StudentList));这一句没啥问题啊,
申请空间后返回一个void ...
我明白了,我确实是有一些犯二了,感谢大佬赐教,以后我也多注意这些细节{:10_265:} 人造人 发表于 2021-10-26 16:34
这个问题不好回答,我感觉没有 “主要” 这么一说
代码中任何一个字母错了都不行
我感觉不能说这个字母 ...
我明白了,我确实是有一些犯二了,感谢大佬赐教,以后我也多注意这些细节{:10_265:} 村里小黑 发表于 2021-10-26 16:47
但是我觉得L = (StudentList*)malloc(sizeof(StudentList));这一句没啥问题啊,
申请空间后返回一个void ...
C语言中不需要这个转换,没有任何必要
人造人 发表于 2021-10-26 15:16
看了你的代码后我知道我哪里错了,是输入格式错了,明明里面有逗号隔开我还用空格隔开,我真是个大傻逼。{:10_250:}不过还是谢谢你帮我改了下代码,学习了 jackz007 发表于 2021-10-26 16:03
编译、运行实况:
感谢,辛苦了{:10_298:} 村里小黑 发表于 2021-10-26 16:21
主要是因为初始化单链表之后没有返回指针?
知道哪里错了,代码没错,是我的输入格式错了。输入里面用逗号隔开的,而我用空格隔开,导致输出结果乱码。{:10_266:}
页:
[1]