while(!feof(fp))
{
fscanf(fp,"%d %s %d %d",&res[i].id,res[i].title,&res[i].price,&res[i].qty);
i++;
}
while(j<i)
{
printf("\nID:|%d|\tNAME:|%s|\tPRICE:|%d|\tQTY:|%d|",res[j].id,res[j].title,res[j].price,res[j].qty);
j++;
}
我有这段代码从文件中收集数据。现在我想知道是否从res[id]
这样的用户那里获得了一个输入,我想减少该特定ID的数量如何做到这一点?
答案 0 :(得分:0)
如果文件是二进制格式,则更容易做到你想要的。
文本和二进制格式有什么区别?如果文件以二进制格式写入,则32位整数将表示为文件中的32个连续位。在文本格式中,数字将表示为例如32
的数字序列。
那么这个差异有什么大不了的?好吧,如果用1243替换32,那么二进制格式的数字仍然需要相同的32位,因此不需要移动其他任何东西,所有你改变的就是这4个字节。在第二种情况下,您再添加2位数字,这将导致文件的所有后续内容以两个字节移位。
为了根据需要移动所有内容,您需要读取文件的当前内容更改值,然后将内容写回。我的意思是你正在做的改变之后的所有内容。