#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_LEN 10
#define FILE_NAME "学生成绩.txt"
#pragma warning(disable:4996)
typedef struct {
char name[NAME_LEN + 1];//姓名
char number[100]; //手机号码
char gender[100]; //性别
char n_place[100]; //籍贯
char birthday[100]; //生日
char p_outlook[100]; //政治面貌
char native[100]; //民族
} student; //用于存储单个学生的信息
typedef struct node {
student stu; //数据域,存储学生信息
struct node *next; //指针域,指向下一个节点
} studentNode; //学生节点
typedef struct {
studentNode *head; //头指针
studentNode *tail; //尾指针
int count; //学生节点总数
} studentList; //学生链表
void initialize(studentList *L);//初始化链表,创建头节点
void enter(studentList *L); //录入链表
void display(studentList *L); //输出链表
void find(studentList *L); //查找某节点
void modify(studentList *L); //修改某节点
void sort(studentList *L); //降序重新建表并输出
void write(studentList *L); //写入文件,边写边释放空间
void read(studentList *L); //读取文件,边读边建表
int main() {
//互动界面
printf(" **************学生信息管理系统**************\n");
printf(" * 1.录入新的学生信息 *\n");
printf(" * 2.按姓名修改学生信息 *\n");
printf(" * 3.按姓名查询学生信息 *\n");
printf(" * 4.输出全部学生的成绩 *\n");
printf(" * 5.退出学生成绩管理系统 *\n");
printf(" ********************************************\n");
printf(" \n");
//创建学生链表
studentList *L = (studentList *)malloc(sizeof(studentList));
//初始化学生链表
initialize(L);
//从文件里读取数据到链表
read(L);
//互动界面是用一个无限循环和一个switch写的
while (1) {
int code;
printf("请输入你想进行的操作对应的数字: ");
scanf("%d", &code);
switch (code) {
case 1:
enter(L);
break;
case 2:
modify(L);
break;
case 3:
find(L);
break;
case 4:
display(L);
break;
case 5:
write(L);
free(L->head); //头节点被销毁
free(L); //链表被销毁
return 0;
default:
printf("%d是无效的数字,请重新输入!\n\n", code);
break;
}
}
return 0;
}
void initialize(studentList *L) {
//创建头节点
studentNode *s = (studentNode *)malloc(sizeof(studentNode));
s->next = NULL;
//初始化链表:
//头尾指针均指向头节点,初始长度为零
L->head = s;
L->tail = s;
L->count = 0;
}
void enter(studentList *L) {
//创建新节点
studentNode *s = (studentNode *)malloc(sizeof(studentNode));
//键入信息并存到新节点中
printf("请输入学生姓名:");
scanf("%s", s->stu.name);
printf("请输入学生手机号:");
scanf("%s", s->stu.number);
printf("请输入性别:");
scanf("%s", s->stu.n_place);
printf("请输入生日:");
scanf("%s", s->stu.birthday);
printf("请输入政治面貌:");
scanf("%s", s->stu.p_outlook);
printf("请输入民族:");
scanf("%s", s->stu.native);
//若链表为空,将尾指针指向新节点
if (L->head == L->tail) {
L->tail = s;
}
//将新节点插进链表头部(头插法)
s->next = L->head->next;
L->head->next = s;
L->count++;
//输出互动信息
printf("信息录入成功!\n\n");
}
这是部分代码,这个程序是链表的学生信息管理系统,目前调试添加学生信息功能,但是在头指针尾指针指向头节点的时候,指针s出现了乱码,所以导致在输入信息之后,学生手机号后面必回有乱码出现,我发现只有在将结构体(代码9-14)中的char数组全部改变为int数据类型的时候才会正常,但是这样又无法正常录入学生信息,我想问一下,有没有办法可以解决这个乱码的问题