2016-04-13 8 views
1

Derzeit sieht mein Code wie folgt aus:Wie speichere ich Daten aus einer Datei in einer Funktion in einem Array und drucke dann dieses Array?

#include<stdio.h> 

#define MAX_SIZE 12 

int readInventory(char filename[], int item[], float price[]); 


int main(void) 
{ 
    int item[MAX_SIZE], i; 
    float price[MAX_SIZE]; 
    char filename[MAX_SIZE]; 
    for (i = 0; i < MAX_SIZE; i++) 
    { 
     readInventory(filename, &item[i], &price[i]); 
     printf("\n%d %.2f\n", item[i], price[i]); 
    } 
    return 0; 
} 


int readInventory(char filename[], int item[], float price[]) 
{ 

    FILE *inventory; 
    int i; 

    inventory = fopen("inventory.dat", "r"); 


    for (i = 0; i < MAX_SIZE; i++) 
    { 
     fscanf(inventory,"%d%f", &item[i], &price[i]);   
     return 1; 
    } 
    fclose(inventory); 
    return 0; 
} 

die ausdruckt:

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

1200 20,00

, die nur die ersten 2 Elemente in der Datei sind

wie mache ich mein Programm zeigt alle 12 verschiedene Artikel?

+0

Entfernen Sie 'return 1' von der Funktion' for' loop. – kaylum

+1

Schauen Sie sich die Schleife an, in der Sie gelesen haben, und denken Sie daran, dass 'return' von der Funktion * sofort * zurückkehrt. –

+0

Und entscheiden, wo Sie die Schleife wollen - entweder in der Funktion readInventory oder außerhalb, aber nicht an beiden Orten. – tofro

Antwort

0

Wenn Sie eine Anweisung return 1 in Ihren Code einfügen, wird sie sofort von der for-Schleife zurückgegeben. Entfernen Sie das und es sollte funktionieren.

#include<stdio.h> 

#define MAX_SIZE 12 

int readInventory(char filename[], int item[], float price[]); 


int main(void) 
{ 
    int item[MAX_SIZE], i; 
    float price[MAX_SIZE]; 
    char filename[MAX_SIZE]; 
    for (i = 0; i < MAX_SIZE; i++) 
    { 
     readInventory(filename, &item[i], &price[i]); 
     printf("\n%d %.2f\n", item[i], price[i]); 
    } 
    return 0; 
} 


int readInventory(char filename[], int item[], float price[]) 
{ 

    FILE *inventory; 
    int i; 

    inventory = fopen("inventory.dat", "r"); 


    for (i = 0; i < MAX_SIZE; i++) 
    { 
     fscanf(inventory,"%d%f", &item[i], &price[i]);   
    } 
    fclose(inventory); 
    return 0; 
} 
+0

Keine Notwendigkeit von readInventory() Aufruf für for-Schleife, es wird wiederholt ohne jede Verwendung. – Ash

0
#include<stdio.h> 

#define MAX_SIZE 12 

int readInventory(char filename[], int item[], float price[]); 

int main(void) 
{ 
    int item[MAX_SIZE], i, err = 0; 
    float price[MAX_SIZE]; 
    char filename[MAX_SIZE] = "data"; 

    if ((err = readInventory(filename, item, price)) != 0) { 
     return err; 
    } 

    for (i = 0; i < MAX_SIZE; i++) 
     printf("%d: %d %.2f\n",i+1, item[i], price[i]); 

    return 0; 
} 

int readInventory(char filename[], int item[], float price[]) 
{ 
    FILE *inventory = NULL; 
    int i; 

    if ((inventory = fopen(filename, "r")) == NULL) { 
     fprintf(stderr, "Failed to open %s\n", filename); 
     return (1); 
    } 

    for (i = 0; i < MAX_SIZE; i++) 
     fscanf(inventory, "%d%f", &item[i], &price[i]); 

    fclose(inventory); 
    return 0; 
} 

können Sie dies versuchen. Sehen Sie den Unterschied beim Passieren des Arrays, indem Sie die Fehlerprüfung für Funktionsaufrufe durchführen. Codeeinzug.

+0

Danke, das erklärt es! Der einzige Unterschied ist, dass ich 1 zurückgab, wenn die Funktion die Datei nicht öffnen konnte und die printf-Anweisung in main fehlschlug –

0

Führen Sie die folgenden Änderungen in Ihrem Code, es wird funktionieren, Entfernen Sie readInventory() in for-Schleife, Aufruf der Funktion einmal kann den Job erledigen.

Zum Drucken setzen Sie eine printf() in readInventory() für die Schleife nach fscanf und entfernen Sie die Anweisung return 1 von dort.

Verwandte Themen