0

我有一个文本文件如下:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20

我想读入一个二维整数数组。问题是该文件没有提供有关二维数据维度的信息。我试着这样做:

FILE *input_file = fopen(argv[1], "r");
while (! feof(input_file)) {
    read = fscanf(input_file, "%d%c", &x, &del);
    if (read != 2) {
        i--;
        break;
    }
    in_data[i][j] = x;
    if ( del == '\n') {
        i++;
        j =0;
        continue;
    }
    j++;
}

如果一行中最后一个数据项之后的字符是换行符,则此代码可以正常工作,否则会失败。在事先不知道数据尺寸的情况下从文件中读取二维数据的可靠方法是什么?

4

1 回答 1

1

一种简单的方法是使用fgets一次读取一行。然后,您可以使用strtol读取值。利用endptr它设置的指针,您可以读取下一个值。

或者,您可以通过一次读取一个字符来创建一个简短的函数来吃空白。你可以在那里处理换行符。读取直到遇到非空白字符,然后使用 . 将该字符放回流中ungetc。像这样的东西:

// Returns false if EOF or error encountered.
int eat_whitespace( FILE *fp, int *bNewLineEncountered )
{
    int c;
    *bNewLineEncountered = 0;

    while( EOF != (c = fgetc(fp)) ) {
        if( c == '\n' ) {
            *bNewLineEncountered = 1;
        } else if( !isspace(c) ) {
            ungetc(c, fp);
            break;
        }
    }

    return (c != EOF);
}
于 2013-04-01T05:55:50.823 回答