为什么信息保存之后再运行,运行不出来!
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
typedef struct {
char name[20];
int wuwen;
int shuxue;
int yingyu;
int number;
}student;
typedef struct listnode {
student data;
struct listnode* next;
}listnode, * linklist;
linklist l = NULL;
FILE* fp;
char filename[100];
void createlist() {
l = (listnode*)malloc(sizeof(listnode));
l->next = NULL;
}
void openfile() {
system("cls");
createlist();
listnode* p, * q;
q = l;
while (true) {
printf("\n\n\t\t\t请输入文件名:");
scanf("%s", &filename);
if ((fp = fopen(filename, "r")) == NULL) {
printf("\t\t\t没有该文件,是否需要创建g/s:");
getchar();
char ch; scanf("%c", &ch);
if (ch == 'g' || ch == 'G') {
if ((fp = fopen(filename, "a+")) == NULL) {
printf("\t\t\t创建文件失败\n");
}
else break;
}
else continue;
}
else break;
}
while (true) {
p = (listnode*)malloc(sizeof(listnode));
if (fscanf(fp, "%d\t%s\t%d\t%d\t%d", &p->data.number, &p->data.name, &p->data.wuwen, &p->data.shuxue, &p->data.yingyu) == EOF) {
free(p);
printf("\t\t\t读入成功\n");
system("pause");
break;
}
p->next = NULL;
q->next = p;
q = q->next;
}
fclose(fp);
}
void add_message() {
system("cls");
printf("\n\n\t\t\t请选择所要添加的人数:");
int x; scanf("%d", &x);
linklist p, q;
for (int i = 0; i < x; i++)
{
p = (listnode*)malloc(sizeof(listnode));
printf("\t\t\t正在添加第%d个学生的信息\n", i + 1);
printf("\t\t\t请输入学号:");
scanf("%d", &p->data.number);
q = l->next;
while (q != NULL) {
if (q->data.number == p->data.number) {
printf("\t\t\t学号重复,请重新输入");
scanf("%d", &p->data.number);
q = l->next;
continue;
}
else q = q->next;
}
printf("\t\t\t请输入名字:");
scanf("%s", &p->data.name);
printf("\t\t\t请输入语文成绩:");
scanf("%d", &p->data.wuwen);
printf("\t\t\t请输入数学成绩:");
scanf("%d", &p->data.shuxue);
printf("\t\t\t请输入英语成绩:");
scanf("%d", &p->data.yingyu);
if (l->next == NULL) {
p->next = NULL;
l->next = p;
}
else {
q = l->next;
while (q != NULL)
{
if (q->next != NULL)
{
if (p->data.number > q->data.number && p->data.number < q->next->data.number) {
p->next = q->next;
q->next = p;
break;
}
}
else {
p->next = NULL;
q->next = p;
break;
}
q = q->next;
}
}
}
system("pause");
}
void print_message() {
system("cls");
printf("\n\n\t\t\t显示学生信息\n");
linklist p;
p = l->next;
printf("\t\t\t学号\t姓名\t语文\t数学\t英语\n");
if (p == NULL) {
printf("\t\t\t没有信息");
system("pause");
return;
}
while (p != NULL) {
printf("\t\t\t%d\t%s\t%d\t%d\t%d\n", p->data.number, p->data.name, p->data.wuwen, p->data.shuxue, p->data.yingyu);
p = p->next;
}
system("pause");
}
void savefile() {
linklist q = l->next;
if ((fp = fopen(filename, "w")) == NULL) {
printf("\t\t\t文件打开失败");
system("pause");
return;
}
else {
while (q != NULL) {
fprintf(fp, "%d\t%s\t%d\t%d\t%d", q->data.number, q->data.name, q->data.wuwen, q->data.shuxue, q->data.yingyu);
q = q->next;
}
}
fclose(fp);
printf("\t\t\t保存成功");
system("pause");
}
int main() {
openfile();
add_message();
print_message();
savefile();
}
第一次保存的信息
然后再运行,输入文件名,然后就一直这样