【发布时间】:2015-04-19 16:42:25
【问题描述】:
我在 .txt 文件中有这样的制表符分隔记录
1000 Aashir 0213-4211685 123456 0
1001 Muhammad Ali 0334-3387918 abcd 0
1002 Azam 0323-2143133 hassan123 0
1003 Taha Hashmi 0214-6589421 786 0
1004 Khan 03452145698 helloworld 0
现在我想使用 fscanf 和 fprintf 更新或修改这些值
这是我迄今为止尝试过的,但现在我被困在如何在特定位置上写字
void update_record(Account* user)
{
FILE *record;int i=0;
record=fopen("database.txt","a+");
char buffer[SIZE];Account req;
while(fgets(buffer,SIZE,record))
{
sscanf(buffer,"%d\t%[^\t]\t%s\t%s\t%ld\n",&req.acc_num,req.name,req.mobileno,req.pass,&req.acc_bal);
++i;
if(req.acc_num==user->acc_num){
fseek(record,SIZE*i-1,SEEK_SET);
fprintf(record,"%d\t%s\t%s\t%s\t%ld\n",user->acc_num,user->name,user->mobileno,user->pass,user->acc_bal);
cout<<"\nFIle updated ";
fclose(record);
break;
}
}
return;
}
我是初学者,请帮忙,我只能使用 fscanf 和 fprintf,#assignmentcriteria :(
【问题讨论】:
-
你必须做 fseek 去特定的位置
-
另一个问题 fscanf 是否将文件指针更改为下一行?
-
问题是你不能真正同时读取和写入同一个文件,当它是一个没有固定大小记录的文本文件时更是如此。通常的解决方案是从文件中一次读取一行,修改要修改的行,然后将这些行写入临时文件,然后将临时文件重命名为实际文件。
-
我已经使用 fseek 更新了代码,但它不起作用请帮忙?
-
删除
fseek()。更新时,1) 使用更新的记录创建新文件。 2)删除旧的原始文件 3)将新文件重命名为旧名称。