将数据从文件读入数组

时间:2011-03-20 08:02:59

标签: c file io

如果我有一个选项文件:

size = 4
data = 1100010100110010

我有一个2d大小*大小的数组,我想填充数据中的值,这是最好的方法吗?

为了澄清,对于我的例子,我想要一个这样的数组:

int [4] [4] array = {{1,1,0,0},{0,1,0,1},{0,0,1,1},{0,0,1, 0}}。 (不是真正的代码,但你明白了。)

大小可以是任何数字。

我想我必须读取大小,maloc数组,然后读取一个充满数据的字符串然后循环遍历数据中的每个字符,将其转换为int并将其粘贴到相应的指数?但是我真的不知道该如何去做,已经找了一段时间没有运气。

任何帮助都会很酷! :)

2 个答案:

答案 0 :(得分:0)

循环。

FILE *fp = fopen("waaa.txt", "r");
if(fp == null) { /* bleh */ return; }

int j = 0;
while(char ch = fgetc(fp)) {
    for(int i = 0; i < 4; ++i) {
        array[j][i] = ch;
    }
    ++j;
}

我不确定fgetc()语法..只需检查它。它一次读取一个字符。

答案 1 :(得分:0)

int process_file(int **array, char const *file_name)
{
    int size = 0;
    FILE *file = fopen(file_name, "rt");
    if(fp == null)
        return -1;//can't open file
    char line[1024]; //1024 just for example
    if(fgets(line, 1024, file) != 0)
    {
        if(strncmp(line, "size = ", 7) != 0)
        {
            fcloes(file);
            return -2; //incorrect format
        }
        size = atoi(line + 7);
        array = new int * [size];
        for(int i = 0; i < size; ++i)
            array[i] = new int [size];
    }
    else
    {
        fclose(file);
        return -2;//incorrect format
    }
    if(fgets(line, 1024, file) != 0)
    {
        if(strncmp(line, "data = ", 7) != 0)
        {
            fcloes(file);
            for(int i = 0; i < size; ++i)
                delete [] array[i];
            delete [] array;
            return -2; //incorrect format
        }
        for(int i = 7; line[i] != '\n' || line[i] != '\0'; ++i)
            array[(i - 7) / size][(i - 7) % size] = line[i] - '0';
    }
    else
    {
        fclose(file);
        for(int i = 0; i < size; ++i)
            delete [] array[i];
        delete [] array;
        return -2; //incorrect format
    }
    return 0;
}

在程序结束前不要忘记删除数组;