请问怎么正确读和写信息到.txt文件中?
ztwz 2004-07-20 10:34:12 这是我写的一个电话薄,但是问题很多,现在能正确编译,但是里面的功能一个都不能正确实现!
在这个程序的同目录下有一个data.txt文本,里面的内容如下:
*
wz
1
yn
*
wy
2
yn
#
我选1的时候不能正确显示电话号码也就是文本里的1和2!其它几个功能也都不能实现,我觉得我的子函数没写错呀,就是不知道哪儿错了,总是感觉好像和主函数连接不太好,但又不知道要怎么修改!请大虾们帮我看看。
#include "stdio.h"
#include "stdlib.h"
int i;
typedef struct phone
{
char name[20];
int phones[20];
char address[40];
struct phone *next;
}phone_info;
f_show(phone_info *ph)
{
phone_info *p;
p=ph->next;
if(p==NULL)
{
printf("数据库为空!\n");
return;
}
while(p)
{
printf("\n名字:%s",p->name);
printf("\n电话:%d",p->phones);
printf("\n地址:%s",p->address);
p=p->next;
}
getch();
}
f_add(phone_info *ph) /*添加信息*/
{
phone_info *p;
p=(phone_info *)malloc(sizeof(phone_info));
printf("请输入要添加入的信息!\n");
printf("名字:");
scanf("%s",&p->name);
printf("\n电话:");
scanf("%ld",&p->phones);
printf("\n地址:");
scanf("%s",&p->address);
if(ph->next==NULL)
{
p->next=ph->next;
ph->next=p;
}
p->next=ph->next;
ph->next=p;
}
f_del(phone_info *ph)
{
phone_info *p,*q;
char name[20];
p=q=ph->next;
printf("请输入要删除人的名字:");
scanf("%s",name);
if(strcmp(name,p->name)==0)
{
ph->next=p->next;
printf("数据删除成功!\n");
getch();
return;
}
while(p->next!=NULL)
{
p=p->next;
if(strcmp(name,p->name)==0)
{
q->next=p->next;
p=p->next;
printf("数据删除成功!\n");
getch();
}
q=p;
}
if((strcmp(name,p->name)==0)&&(p->next==NULL))
{
q=p->next;
p=q;
printf("数据删除成功!\n");
getch();
return;
}
else
{
printf("查无此人\n");
return;
}
}
f_menu(phone_info *p)
{
char menu;
clrscr();
printf("\t************************************************************\n");
printf("\t***** 1--显示所有记录 *****\n");
printf("\t***** 2--添加一条记录 *****\n");
printf("\t***** 3--删除一条记录 *****\n");
printf("\t***** 4--保存 *****\n");
printf("\t***** 5--退出程序 *****\n");
printf("\t************************************************************\n");
printf("\t请输入数字(1-5):");
scanf("%c",&menu);
switch(menu)
{
case '1' : f_show(p); break;
case '2' : f_add(p); break;
case '3' : f_del(p); break;
case '4' : f_seve(p); break;
case '5' : exit(1); break;
default :
{
printf("输入错误!\n");
printf("按任意键退出!...");
getch();
}
}
}
f_all_file(phone_info *ph)
{
FILE *fp;
phone_info *p,*q;
char ch;
i=0;
q=ph;
fp=fopen("data.txt", "rt");
if(fp==NULL)
{
printf("打开数据库失败!\n按任意键退出!");
getch();
exit(1);
}
ch=fgetc(fp);
while(ch!='#')
{
p=(phone_info *)malloc(sizeof(phone_info));
fscanf(fp,"%s\n%d\n%s\n",&p->name,&p->phones,&p->address);
q->next=p;
i++;
q=p;
ch=fgetc(fp);
}
if(i==0)
{
printf("数据库为空!\n");
getch();
return;
}
else
{
q->next=NULL;
printf("共有 %d 信息!\n",i);
getch();
return;
}
}
f_seve(phone_info *ph)
{
phone_info *p;
FILE *fp;
p=ph->next;
fp=fopen("data.txt","wt");
if(fp==NULL)
{
printf("数据库为空\n");
fputc('#',fp);
fclose(fp);
getch();
return;
}
printf("请等待.........\n");
while(p)
{
/*fputc('*',fp);*/
fprintf(fp,"%s\n%ld\n%s\n",p->name,p->phones,p->address);
p=p->next;
}
fputc('#',fp);
fclose(fp);
printf("保存成功!\n");
getch();
}
main()
{
phone_info *p;
p=(phone_info *)malloc(sizeof(phone_info));
f_all_file(p);
f_menu(p);
free(p);
getch();
}