我沒有問題打開和閱讀二進制文件,當我沒有把它傳遞給一個函數。但是,在這種情況下,我將它傳遞給一個函數,並繼續遇到問題。在函數中打開二進制文件?看代碼:
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
它不應該打印「錘子」兩次。只有大膽的一個應該打印。如果你可以給我一個鏈接,或者如果你有建議,它將非常感激!
只是出於好奇,爲什麼你通過fp函數?它在'main'中關閉,並在'fun1'中重新打開,所以它也可以是'fun1'中的局部變量。 –
另一個需要注意的地方是,在'main'中定義'a'爲'tag a [10]',但fun1想要一個'struct inventory'數組。我猜你有'typedef結構庫存標籤'的地方。如果今天只是有點困惑,想想幾個月後會如何。爲了你自己的緣故,你應該和變量和參數的類型保持一致。 –
我傳遞fp給函數,因爲我正在做的項目需要我有一個二進制文件,我必須在函數中顯示輸出。我是全新的FILE I/O的東西,所以我確定我是否做得對。 – Shamrocck