如何将文件中的数据存储在数组中的函数中,然后打印该数组?

时间:2016-04-13 06:28:08

标签: c arrays file-management read-write

目前我的代码如下:

type MyOptions struct {
    Field1 int      // zero value (default) of int is 0
    Field2 string   // zero value (default) of string is ""
}

func DoAction(arg1, arg2 string, options *MyOptions){
    var defaultValue1 int = 30        // some reasonable default
    var defaultValue2 string = "west" // some reasonable default

    if options != nil {
        defaultValue1 = options.Field1 // override with our values
        defaultValue2 = options.Field2 
    }
    doStuffWithValues

打印出来:

  

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

只是文件中的前两项

如何让我的节目显示所有12个不同的项目?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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;
}

你可以试试这个。看到传递数组的不同,对函数调用进行错误检查。代码缩进。

答案 2 :(得分:0)

在代码中执行以下更改,它会起作用, 在for循环中删除readInventory(),调用该函数可以完成这项工作。

对于打印,在fscanf之后将printf()放入readInventory()for循环中,并从那里删除return 1语句。