2016-04-13 5 views
1

В настоящее время мой код выглядит следующим образом:Как хранить данные из файла в функции в массиве и затем печатать этот массив?

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

который печатает:

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

, которые являются только первые 2 пунктов в файле

как мне сделать мою программу показать все 12 различных элементов?

+0

Удалите 'return 1' из цикла' for'. – kaylum

+1

Посмотрите на этот цикл, где вы читаете, и помните, что 'return' возвращает функцию * немедленно *. –

+0

И решите, где вы хотите, цикл - либо в функции readInventory, либо снаружи, но не в обоих местах. – tofro

ответ

0

Включая инструкцию return 1 в свой код, немедленно возвращается из цикла for. Удалите это, и он должен работать.

#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

Нет необходимости в readInventory() для вызова цикла, он будет использоваться без каких-либо изменений. – 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; 
} 

вы можете попробовать это. см. разницу в прохождении массива, выполнение проверки ошибок для вызовов функций. отступ кода.

+0

Спасибо, это объяснило это! единственная разница в том, что я вернул 1, если функция не открыла файл и сделала заявление об ошибке printf в главном –

0

Произошли следующие изменения в коде: Удалить readInventory() в цикл for, Вызов функции один раз может выполнить задание.

Для печати поставьте printf() в readInventory() для цикла после fscanf и удалите инструкцию return 1 оттуда.