文件读写问题 c高手请进

李万鹏 2009-10-05 07:26:27
下面是我的代码 从内存写入文件正确 但从文件读入内存都是乱码 而且程序崩溃 请c高手指点
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct inf
{
char name[10];
char address[20];
long number;
long telnumber;
struct inf *next;
};
struct inf *input(struct inf *head)
{
struct inf *p,*q;
int i,population;
if(head!=NULL)
{
p=q=head;
while(p!=NULL)
{
q=p;
p=p->next;
}
}
printf("请输入要输入的人数!\n");
scanf("%d",&population);
for(i=0;i<population;i++)
{
p=(struct inf *)malloc(sizeof(struct inf));
printf("姓名: ");
scanf("%s",p->name);
printf("通讯地址: ");
scanf("%s",p->address);
printf("邮编:");
scanf("%ld",&p->number);
printf("联系电话: ");
scanf("%ld",&p->telnumber);
printf("\n");
p->next=NULL;
if(head==NULL)
head=q=p;
else
{
q->next=p;
q=p;
}
}
return head;
}
void display(struct inf *head)
{
struct inf *p;
if(head==NULL)
printf("没有存储任何信息!\n");
else
{
p=head;
while(p!=NULL)
{
printf("%s,%s,%ld,%ld\n",p->name,p->address,p->number,p->telnumber);
p=p->next;
}
}
}
void check(struct inf *head)
{
struct inf *p,*q;
char fname[20];
printf("请输入要查找人的姓名\002:\n");
scanf("%s",fname);
if(head==NULL)
printf("没有存储任何信息!");
else
{
p=head;
while(p!=NULL&&strcmp(p->name,fname)!=0)
{
q=p;
p=p->next;
}
if(p==NULL)
printf("这个人的信息不存在!\n");
else
if(strcmp(p->name,fname)==0)
printf("%s,%s,%ld,%ld\n",p->name,p->address,p->number,p->telnumber);
}
}
struct inf *import()
{
FILE *fp;
struct inf *head,*p,*q;
if((fp=fopen("通讯录管理系统.txt","r"))==NULL)
return head=NULL;
while(!feof(fp))
{
p=(struct inf*)malloc(sizeof(struct inf));
fscanf(fp,"%s\n",p->name);
fscanf(fp,"%s\n",p->address);
fscanf(fp,"%ld\n",&p->number);
fscanf(fp,"%ld\n",&p->telnumber);
fscanf(fp,"\n");
if(head==NULL)
head=q=p;
else
{
q->next=p;
q=p;
}
}
p->next=NULL;
fclose(fp);
return head;
}
void save(struct inf *head)
{
struct inf *p;
FILE *fp;
p=head;
fp=fopen("通讯录管理系统.txt","w");
while(p!=NULL)
{
fprintf(fp,"%s\n%s\n%ld\n%ld\n",p->name,p->address,p->number,p->telnumber);
p=p->next;
}
fclose(fp);
printf("信息已经保存!");
}
int main()
{
int number,t,i;
struct inf *head;
head=import();
printf(" \001欢迎登陆通讯录管理系统\001\n");
printf(" 1.输入信息 2.显示信息 3.查找信息 4.退出系统\n");
while(number!=4)
{
printf("请输入您选择的服务!\n");
scanf("%d",&number);
switch(number)
{
case 1:head=input(head);break;
case 2:display(head);break;
case 3:check(head);break;
case 4:
printf("1.保存修改的信息后退出 2.不保存直接退出\n");
printf("\002请选择\002\n");
scanf("%d",&i);
switch(i)
{
case 1:
save(head);
exit(0);break;
case 2:
printf("欢迎下次登陆系统!\n");
exit(0);
default:printf("输入错误!\n");
}
break;
default:printf("输入错误,请重新输入!\n");
}
}
system("pause");
return 0;
}
...全文
96 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
李万鹏 2009-10-05
  • 打赏
  • 举报
回复
谢谢三楼 高手 太谢谢了
virgo00 2009-10-05
  • 打赏
  • 举报
回复
struct inf *import()
{
FILE *fp;
struct inf * head = NULL;
struct inf * p = NULL;
struct inf * q = NULL;

局部变量没有初始化,导致无法进入分支;
if(head==NULL)
head=q=p;
q指针没有被赋值就直接使用,导致错误;
菜鸟二号 2009-10-05
  • 打赏
  • 举报
回复
太长了
aizibion 2009-10-05
  • 打赏
  • 举报
回复
int number,t,i;
struct inf *head;
head=import();
printf(" \001欢迎登陆通讯录管理系统\001\n");
printf(" 1.输入信息 2.显示信息 3.查找信息 4.退出系统\n");

//请赋初值
number = 0;

while(number!=4)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧