void save() { mess* p = head; fp = fopen("d:\\stu.txt", "ab+"); //<<-- system("cls"); if (head == NULL) //<<-- { printf("保存失败,信息为空。"); system("pause"); system("cls"); return; } while (p != NULL) { fprintf(fp, "%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\t\r\n", p->number, p->name, p->sex, p->year, p->month, p->add, p->phone, p->mail); p = p->next; } fclose(fp); printf("保存成功。\n"); system("pause"); system("cls"); return; } 你数据没有保存对
draw函数启动的时候,屏幕输出什么了? Start reading data from file ...... 1 陈 ------Finish-------- 还是什么也木有
head一开始是NULL,但是你的录入操作等,折腾后就不是NULL了 还有那个n,表示有多少个, 这个要和head一样初始化为0 draw读取到时候,也要对n进行同步,才能计数 你的这个数据文件,你打开看了没有,里面都是什么样子的数据,确定正确吗? 很是怀疑呢, 前面的input都是错的, 后面的save怎么可能正确执行下来的 如果save执行的不对, 比如,写入的name的长度超长,超过了数组的大小, 读取进来必然会把mess变量撑死 现在是严重的怀疑你的数据文件就不对 还有就是你怎么确定的问题是出在draw函数里面的呢? 你可以在draw函数上做一点改造: printf("\nStart reading data from file ......\n") while(!feof(fp)) { p=(mess*)malloc(sizeof(mess)); fscanf(fp,"%ld %s %s %d %d %s %s %s\r\n", &p->number,p->name,p->sex,&p->year,&p->month,p->add, p->phone,p->mail); printf("%d %s\n", p->num, p->name); p->next=head; head=p; } printf("\n------Finish--------\n"); 看看屏幕输出了什么
void save() { mess *p=head; fp=fopen("d:\\stu.txt","ab+"); 前面保存的就不对。 难道用二进制打开,可以用文本方式读写吗?
69,369
社区成员
243,082
社区内容
加载中
试试用AI创作助手写篇文章吧