C程序未能将以前读取的内容插入到文件内容中



当我开始重新插入文件内容并保存新文件时,我的c程序中出现了这个问题。它在while循环中失败了,我不明白如果我有一些内容要重新插入,它为什么会这样做。

这是我的代码:">

void init(){
char pn[30],pd[30],pp[30];
if ((flptr = fopen("MASTER.dat","r+")) == NULL) { 
printf("Couldnt Get Cred");
return;
}
fscanf(flptr,"%s %s %s",pn,pd,pp);

while(!feof(flptr)){
r = (struct Records *) malloc(sizeof(struct Records));
int fr = fscanf(flptr,"%s %s %f",r->PartNum,r->PartDesc, &r->PartPrice);
if(fr == EOF){
printf("HERE");
break;
}
if(head == NULL){
head = r;
}
else{
tail->next = r;
}
tail = r;
}
fclose(flptr);
}

void put(){
if ((flptr = fopen("MASTER.dat","r")) == NULL) { 
printf("Couldnt Get Cred");
return;
}
r = head;
fprintf(flptr,"PartNumber PartDescription PartPricen");
while (r != NULL){
fprintf(flptr,"%s %s %fn", r->PartNum, r->PartDesc, r->PartPrice);
r = r->next;
}
fprintf(flptr,"Changes SAVED.");
fclose(flptr);
}

在函数put中,您打开文件是为了读取它,而不是写入它,因此您的fprintf将无效,甚至无法创建文件

if ((flptr = fopen("MASTER.dat","r")) == NULL) { 

必须是

if ((flptr = fopen("MASTER.dat","w")) == NULL) { 

如果稍后您尝试使用init读取不存在的文件,则不会成功

除了putinit使用全局变量r并对其进行修改外,我鼓励您使用局部变量来避免可能出现的问题


为什么在init中打开带有"r+"的文件,而只读取它?


当你通过(f(scanf读取字符串时,我鼓励你限制长度,不要用未定义的行为写出接收器,并始终检查结果,例如更换

fscanf(flptr,"%s %s %s",pn,pd,pp);

通过

if (fscanf(flptr,"%29s %29s %29s",pn,pd,pp) != 3) {
printf("invalid file containn");
return;
}

相关内容

  • 没有找到相关文章

最新更新