我无法从文件中读取超过49个结构数组

时间:2014-09-29 18:15:24

标签: c arrays file struct

我有这个代码。当我编译并执行它时,没有显示错误,但是,从第50个元素到最后一个元素,这些值超出了rand()的间隔(我认为,从0到32767)。这是非常意外的,因为程序继续而没有显示任何写入错误消息。

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#define MAX 100

using namespace std;

struct num {
    int val;
};

int main() {
    FILE *f, *g;
    num data[MAX];

    f = fopen("file1.txt", "w");
    if(f == NULL) {
        printf("Error\n");
        exit(0);
    } else {
        for(int i = 0; i < MAX; i++) {
            data[i].val = rand();
        }
        fwrite(data, sizeof(num), MAX, f);
        if(ferror(f)) {
            exit(0);
        }
        fclose(f);
    }

    num data1[MAX];
    g = fopen("file1.txt", "r");

    if(g == NULL) {
        exit(0);
    } else {
        fread(data1, sizeof(num), MAX, g);
        if(ferror(g)) {
            printf("Error\n");
            exit(0);
        }
        fclose(g);

        for(int i = 0; i < MAX; i++) {
            printf("val %d : %d\n", i+1, data1[i].val );
        }
    }
}

2 个答案:

答案 0 :(得分:0)

您的代码没有问题。

main的末尾添加以下内容以检查任何不匹配的值。

for (int i = 0; i < MAX; ++i )
{
   if ( data[i].val != data1[i].val )
   {
      printf("The %d-th value does not match after reading from file.\n", i);
   }
}

答案 1 :(得分:0)

我认为文件打开模式存在问题,您选择了text模式,该模式取决于系统,将其更改为binary模式,一切都可以用作预期。< / p>

文字模式取决于运行应用程序的环境不同的输入/输出中可能会发生一些特殊字符转换根据系统特定文本的文本。虽然在相同的环境中,二进制文件模式不会进行转换。 二进制模式保存并读取您的数据,无需任何转换。