我有一个文本文件如下:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
我想读入2-d整数数组。问题是文件没有提供有关二维数据维度的信息。我尝试按如下方式进行:
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++;
}
如果行中最后一个数据项之后的字符是换行符,则此代码可以正常工作,否则会失败。在不事先知道数据维度的情况下从文件中读取二维数据的可靠方法是什么?
答案 0 :(得分: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);
}