C 在函数中打开二进制文件?见代码:
当我没有将二进制文件传递给函数时,打开和读取二进制文件没有问题。但是,在这种情况下,我将它传递给一个函数,并不断遇到问题C 在函数中打开二进制文件?见代码:,c,function,file-io,binaryfiles,stdio,C,Function,File Io,Binaryfiles,Stdio,当我没有将二进制文件传递给函数时,打开和读取二进制文件没有问题。但是,在这种情况下,我将它传递给一个函数,并不断遇到问题 void fun1 (int amount,struct inventory a[],FILE *fp); int main() { tag a[10]; int amount; int i; FILE *fp; fp=fopen("e:\\invent.txt","wb"); printf("How many items
void fun1 (int amount,struct inventory a[],FILE *fp);
int main()
{
tag a[10];
int amount;
int i;
FILE *fp;
fp=fopen("e:\\invent.txt","wb");
printf("How many items do you want to enter? ");
scanf("%d",&amount);
for(i=1;i<=amount;i++)
{
printf("Enter the name of the item: ");
scanf("%s",a[i].name);
printf("Enter the unit amount the item has: ");
scanf("%d",&a[i].num);
printf("Enter the unit price for the item: ");
scanf("%f",&a[i].price);
fwrite(&a[i],sizeof(a[i]),amount,fp);
}
fclose(fp);
fun1(amount,a,fp);
}
void fun1(整数金额,结构库存a[],文件*fp);
int main()
{
标签a[10];
整数金额;
int i;
文件*fp;
fp=fopen(“e:\\invent.txt”、“wb”);
printf(“您要输入多少项?”);
scanf(“%d”和金额);
对于(i=1;i在您的输入中,您是1-索引数组。数组是零索引的,因此您访问的最后一个索引超出了范围,并且不知道您将得到什么
将该循环更改为
for (i = 0; i < amount; i++)
for(i=0;i
问题在于fun1方法中,您试图收集整个列表,但您给出了结构的大小,以便它可以读取到第一个结构
试试这个:
void fun1 (FILE *fp)
{
_tag a;
fp=fopen("e:\\invent.txt","rb");
while(fread(&a,sizeof(_tag),1,fp) == 1)
{
printf("\nItem\tUnit #\tPrice\n");
printf("\n%s\t%d\t%d",a.name,a.num,a.price);
}
fclose(fp);
}
出于好奇,您为什么要将fp
传递给函数?它在main
中关闭,在fun1
中重新打开,因此它也可以是fun1
中的局部变量。另外,在main
中,您将a
定义为标记a[10]
,但是fun1
想要一个struct inventory
数组。我猜你在什么地方有typedef struct inventory标签
。如果今天只是有点困惑,想想几个月后会是什么样子。为了你自己的利益,你应该与变量和参数的类型保持一致。我将fp传递给function因为我正在做的项目要求我有一个二进制文件,并且我必须在函数中显示输出。我对整个文件i/O都是新手,所以我确信我是否做得对。不必传递文件指针,只需在函数中再次声明它。因为你在函数中再次打开文件,所以一切都会好起来。
void fun1 (FILE *fp)
{
_tag a;
fp=fopen("e:\\invent.txt","rb");
while(fread(&a,sizeof(_tag),1,fp) == 1)
{
printf("\nItem\tUnit #\tPrice\n");
printf("\n%s\t%d\t%d",a.name,a.num,a.price);
}
fclose(fp);
}