2011-12-02 3 views
0

함수에 전달하지 않을 때 이진 파일을 열고 읽는 데 문제가 없습니다. 그러나이 경우 함수에 전달하고 문제가 계속 발생합니다.함수에서 이진 파일 열기? 코드 참조 :

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);   
} 

^^ 이것은 나의 입력과 함수 호출을 ^^.

내 입력 :

얼마나 많은 항목을 입력 할 수 있습니까? 32
이 항목에 대한 단가 입력 :: 단위 량을 입력 손톱
11
는 항목의 이름을 입력 해머
항목 갖는 단위 량을 입력하여 2
는 항목의 이름을 입력 항목이 : 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

"해머"를 두 번 인쇄해서는 안됩니다. 오직 굵은 글씨 만 인쇄해야합니다. 당신이 나에게 링크를 줄 수 있거나 조언이 있다면 크게 감사 할 것입니다!

+0

호기심에서 벗어난 이유는 무엇입니까? 'fp'를 함수에 전달하는 이유는 무엇입니까? 그것은'main'으로 닫히고'fun1'에서 재개 되었기 때문에'fun1'에서 지역 변수가 될 수도 있습니다. –

+0

'main'에서'a '를'a [10]'으로 정의하지만'fun1'은'struct inventory' 배열을 원합니다. 어딘가에'typedef struct inventory tag'가 있다고 생각합니다. 오늘이 약간 혼란 스럽다면 몇 달 안에 어떻게 될지 생각해보십시오. 당신 자신을 위해 변수와 매개 변수의 유형과 일치해야합니다. –

+0

내가하고있는 프로젝트에서 바이너리 파일이 필요하고 함수에 출력을 표시해야하기 때문에 fp를 함수에 전달하고있다. 나는 FILE I/O 전체에서 새로운 것이므로 나는이 일을 올바르게하고 있는지 확신합니다. – Shamrocck

답변

1

입력 사항에서 1 인덱싱 배열입니다. 배열은 인덱스가 제로이므로 액세스하고있는 마지막 인덱스가 범위를 벗어나서 얻을 수있는 정보가 없습니다. 루프가

for (i = 0; i < amount; i++) 
0

문제가 될 수 있음을

변경은 처음 구조를 읽을 수 있도록 전체 목록을 수집하려고하지만 구조의 크기를주는 당신의 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); 

}