C语言通讯录怎么保存文件并且再次打开时能显示储存的数据?

add(){inti,num;charstr[10];if((fp=fopen("student.bin","wb+"))==NULL){printf("\n\t\t文件... add()
{
int i,num;
char str[10];
if ((fp=fopen("student.bin","wb+"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for (i=0;i<num;i++)
{
if (fwrite(&student[i],sizeof(struct record),1,fp)!=1)
{
printf("\n\t\t写入文件错误!\n");
}
printf("\n\t\t**************** 请输入联系人信息 ****************\n");
printf("\n\t\t输入姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t输入电话号码:");
scanf("%s",&student[num].phone);
printf("\n\t\t输入地址:");
scanf("%s",&student[num].adress);
printf("\n\t\t输入邮编:");
scanf("%s",&student[num].postcode);
printf("\n\t\t输入e-mail:");
scanf("%s",&student[num].e_mail);
num++;
printf("\n\t\t是否继续添加?(请输入y(是)或n(否):");

if (getch()=='y')
adduser();
return(0);
}

fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);

return(0);
}
这是保存文件那部分的代码,请各位大神求助!!
展开
 我来答
弦断泪已绝_
2017-12-24 · 超过43用户采纳过TA的回答
知道答主
回答量:72
采纳率:75%
帮助的人:13.6万
展开全部
// 显示文件的数据:
// mon 1001: $1.20 0
// tue 1002: $2.30 0
// wed 1003: $3.40 0
// thu 1004: $4.50 0
// fri 1005: $5.60 0
// 请输入查询卡号: 1003
// 测试---开始
// wed 1003: $3.40 1
// 测试---结果
//
// 显示文件的数据:
// mon 1001: $1.20 0
// tue 1002: $2.30 0
// wed 1003: $3.40 1
// thu 1004: $4.50 0
// fri 1005: $5.60 0

#include
#include
#include

struct arm
{
char name[11];
char num_car[11];
float value;
int state;
};

struct arm num[100]; //暂时没有用到

void loss_card(void)
{
struct arm oneItem;
char infor[11];
//原代码int a;
int ret; //函数fread()的返回值
int size = sizeof(struct arm);
FILE *pcard;

//原代码if ((pcard = fopen("book.dat", "a+b")) == NULL)
// rb+ 读写打开一个二进制文件,允许读写数据(可以任意修改),文件必须存在.
if ((pcard = fopen("book.dat", "rb+")) == NULL)
{
fputs("无法打开book.dat文件\n", stderr);
exit(1);
}
//原代码while (getchar() != '\n');
//原代码printf("请输入查询卡号:\n");
//原代码s_gets(infor, 11);
printf("请输入查询卡号:");
fflush(stdin); //清空输入缓存,吸收掉回车符(有的编译器不适用)
gets(infor);
printf("测试---开始\n");
//原代码for (a = 0; fread(&num[a], size, 1, pcard); a++)
while(!feof(pcard)) //没有到达文件的结尾
{
ret=fread(&oneItem, size, 1, pcard);
if(ret==1)
{
if (strncmp(infor, oneItem.num_car, 10) == 0)
{
if(oneItem.state == 0)
{
oneItem.state = 1;
printf("%s %s: $%.2f %d\n", oneItem.name, oneItem.num_car,
oneItem.value, oneItem.state);
}
else
{
printf("该账户已挂失。");
}
//把文件指针移动到离文件当前位置的-size的地方,也就是退回1个size
//常数SEEK_CUR表示当前位置
fseek(pcard,-size,SEEK_CUR);

fwrite(&oneItem, size, 1, pcard); //写入新数据

//只需找到一个,写入新数据后就退出,如果继续循环,会异常
break;
}
}
}
//原代码fwrite(&num[a], size, 1, pcard);
printf("测试---结束\n");
fclose(pcard);
}

void testWrite() //测试:写入文件
{
struct arm test[5]={{"mon","1001",1.2,0},{"tue","1002",2.3,0},
{"wed","1003",3.4,0},{"thu","1004",4.5,0},
{"fri","1005",5.6,0}};
FILE *pcard;
int size = sizeof(struct arm);
int a;
// wb 只写打开或建立一个二进制文件,只允许写数据
pcard = fopen("book.dat", "wb");
if (pcard == NULL)
{
fputs("无法打开book.dat文件\n", stderr);
exit(1);
}
for(a=0;a<5;a++)
{
fwrite(&test[a], size, 1, pcard);
}
fclose(pcard);
}

void testRead() //测试:读取文件
{
struct arm oneItem;
FILE *pcard;
int size = sizeof(struct arm);
int ret;
// rb 只读打开一个二进制文件,只允许读数据
pcard = fopen("book.dat", "rb");
if (pcard == NULL)
{
fputs("无法打开book.dat文件\n", stderr);
exit(1);
}
printf("\n显示文件的数据:\n");
while(!feof(pcard)) //没有到达文件的结尾
{
ret=fread(&oneItem, size, 1, pcard);
if(ret==1)
{
printf("%s %s: $%.2f %d\n", oneItem.name, oneItem.num_car,
oneItem.value, oneItem.state);
}
}
fclose(pcard);
}

int main()
{
testWrite(); //测试:写入文件
testRead(); //测试:读取文件

loss_card();

testRead(); //测试:读取文件

return 0;
}
追问
能解释一下怎么显示文件里的数据吗?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式