在C中将多个整数从文件扫描到整数数组中

时间:2013-11-13 04:36:09

标签: c arrays file scanf

尝试寻找类似于我的问题,但没有太多运气。

为我的数据结构类处理经典的“bin-packing问题”,但是我正忙着处理一个小问题:扫描整数。

这是麻烦功能的代码。其目的是创建三个文件:     bbsi.txt     bbvi.txt,并     vbvi.txt 这是由我已经测试过的辅助函数处理的。 'bbsi.txt'和'bbvi.txt'各有50个整数,而vbvi.txt有100个整数。我传递了四个int数组来读取它们。

void intializeArrays(int BBSIitems[], int BBVIitems[], int VBVIbins[], int VBVIitems[])
{
    char *bbsiMaker = "bbsi.txt";
    char *bbviMaker = "bbvi.txt";
    char *vbviMaker = "vbvi.txt";

    FILE *makeBBSI = fopen(bbsiMaker, "w");
    FILE *makeBBVI = fopen(bbviMaker, "w");
    FILE *makeVBVI = fopen(vbviMaker, "w");

    srand(time(NULL));

    createBBSI(makeBBSI);
    createBBVI(makeBBVI);
    createVBVI(makeVBVI);

    int i;
    //puts all item sizes in the various arrays for use by the bin-packing heuristics
    for(i = 0; i < 50; i++)
    {
        fscanf(makeBBSI, "%i", BBSIitems[i]);
    }

    for(i = 0; i < 50; i++)
    {
        fscanf(makeBBVI, "%i", BBVIitems[i]);
    }

    for(i = 0; i < 50; i++)
    {
        fscanf(makeVBVI, "%i", VBVIitems[i]);
    }

    //puts all bin sizes into the VBVIbins array for use by the VBVI heuristic
    for(i = 0; i < 50; i++)
    {
        fscanf(makeVBVI, "%i", VBVIbins[i]);
        printf("%i\n", VBVIbins[i]);
    }

    //always gotta close those file streams..
    fclose(makeBBSI);
    fclose(makeBBVI);
    fclose(makeVBVI);

    return;
}

例如,这里是vbvi.txt。 (注意:它们在文本文件中逐行分开..不知道如何在这里发生这种情况)

vbvi.txt    41 43 89 91 64 95 70 43 42 76 74 85 63 78 62 58 91 42 92 43 71 49 61 53 79 48 57 83 72 49 80 74 54 68 66 78 65 99 84 69 74 57 55 97 96 78 57 88 80 48 53 21 105 22 79 95 86 62 21 34 38 36 28 35 71 46 72 71 43 71 85 106 71 64 25 64 33 29 102 70 72 45 34 29 101 94 104 40 45 105 54 26 30 25 41 45 105 57 96 92

为确保程序正常运行,我让程序打印出数组的每个值。这就是出现问题的地方。

VBVIitemsVBVIbins的输出: 2090266759 0 1486921290 48 0 0 1556741664 32574 1 0 0 0 1 48 1489111448 48 -1021968384 6336833 0 0 0 0 1486944385 48 0 0 1489114336 48 1194362048 32767 0 0 1194362072 32767 0 1 0 0 1486882620 48 0 0 0 0 0 0 0 0 1 0 1489111448 48 1486918310 48 19 0 1194362192 32767 1194362240 32767 1194362192 32767 1 0 1489114944 48 1910330751 0 1486918310 48 1489108688 48 1194362256 32767 63 48 1194362256 32767 3 0 1556740944 32574 -163754450 0 1486920631 48 1 32767 64550200 0 46 0 1491090000 48 0 0 1194362640 32767 1491090504 48

看起来很像地址或其他东西,但是啊。哇。

编辑:添加我的数组声明和函数调用,以防万一有值得注意的事情。

int BBSIitems[50], BBVIitems[50], VBVIbins[50], VBVIitems[50];

intializeArrays(BBSIitems, BBVIitems, VBVIbins, VBVIitems);

2 个答案:

答案 0 :(得分:0)

fscanf中的第三个参数需要是指向存储读取值的位置的指针。您的代码应如下(注意&符号):

fscanf(makeBBSI, "%i", &BBSIitems[i]);

等每个fscanf电话。

答案 1 :(得分:0)

  1. 您必须以r模式而不是w打开文件才能从中读取。
  2. 您必须更改fscanf语句以传递必须读取int的变量的地址。
    像这样 -

    fscanf(makeBBSI, "%i", &BBSIitems[i]);
    //or
    fscanf(makeBBSI, "%i", BBSIitems + i);