首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在C中将多个整数从文件扫描到整数数组

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

Stack Overflow用户
提问于 2013-11-13 04:36:09
回答 2查看 1.3K关注 0票数 0

我试着找一个和我类似的问题,但是运气不太好。

为我的数据结构类处理经典的“装箱问题”,但是我被挂在一个琐碎的事情上:扫描整数。

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

代码语言:javascript
复制
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 1556741664 32574 1 0 0 0 1 1 48 1489 111448-102 0 0 0 884 6336833 0 0 0 14869 44385 48 0 0 14869 44 385 48 4 0 1489 114336 48 1194 114336 48 1194 6 036 4 0 0 1 0 1 0 14868 82620 48 0 0 0 1 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0 1 0 0 0 1 0 0 0 1 0 0 1 0 0 1 0 0 0 1 0 1 1489111448 48 14 869 1838 48 19 0 1194 36 2 767 1194697 1194664 32740 32767 119436 3192 32767 3 2767 1194 3192 32767 1

看起来很像地址之类的,但是是的.哇哦。

编辑:添加我的数组声明和函数调用,以防有什么值得注意的地方。

代码语言:javascript
复制
int BBSIitems[50], BBVIitems[50], VBVIbins[50], VBVIitems[50];

intializeArrays(BBSIitems, BBVIitems, VBVIbins, VBVIitems);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-13 04:46:10

  1. 您必须以r模式打开文件,而不是以w模式读取文件。

  1. 您必须更改fscanf语句以传递要读取int的变量的地址。 就像这样- (makeBBSI,"%i",&BBSIitemsi);/或fscanf(makeBBSI,"%i",BBSIitems + i);
票数 0
EN

Stack Overflow用户

发布于 2013-11-13 04:42:24

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

代码语言:javascript
复制
fscanf(makeBBSI, "%i", &BBSIitems[i]);

等等,对于每个fscanf调用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19945389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档