【发布时间】:2011-12-02 04:48:30
【问题描述】:
当我没有将二进制文件传递给函数时,打开和读取二进制文件没有问题。但是,在这种情况下,我将它传递给一个函数并继续遇到问题。
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);
}
^^这是我的输入加上我的函数调用^^。
我的意见:
您要输入多少项? 2
输入物品名称:锤子
输入物品的单位数量:32
输入商品的单价:11
输入商品名称:钉子
输入商品的单位数量:43
输入商品的单价:12
void fun1 (int amount,struct inventory a[],FILE *fp)
{
int i;
fp=fopen("e:\\invent.txt","rb");
while(fread(&a[amount],sizeof(tag),amount,fp) == amount)
{
printf("\nItem\tUnit #\tPrice\n");
for(i=1;i<=amount;i++)
{
printf("\n%s\t%d\t%.2f",a[i].name,a[i].num,a[i].price);
}
}
fclose(fp);
getchar();
}
^^我的功能^^
我的输出:
商品单位#价格
锤子 32 11.00
锤子 32 11.00
商品单位#价格
锤子 32 11.00
钉子 43 12.00
它不应该打印两次“Hammer”。只应打印粗体。如果您能给我一个链接或者如果您有建议,将不胜感激!
【问题讨论】:
-
只是出于好奇,为什么要将
fp传递给函数?它在main中关闭并在fun1中重新打开,因此它也可以是fun1中的局部变量。 -
另一个注意事项,在
main中,您将a定义为tag a[10],但fun1需要struct inventory数组。我猜你在某处有typedef struct inventory tag。如果今天只是有点混乱,想想几个月后会怎样。为了您自己的利益,您应该与变量和参数的类型保持一致。 -
我将 fp 传递给函数,因为我正在做的项目需要我有一个二进制文件,并且我必须在函数中显示输出。我是整个 FILE I/O 方面的新手,所以我确定我是否做对了。
-
文件指针不必传递,只需在函数中再次声明即可。在函数内再次打开文件就可以了。
标签: c function file-io binaryfiles stdio