我有一个文本文件,如下:
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++;
}
如果一行中最后一个数据项后面的字符是换行符,则此代码可以正常工作,否则会失败。在事先不知道数据尺寸的情况下从文件中读取二维数据的可靠方法是什么?
最佳答案
一个简单的方法是使用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);
}
关于c - 将 .txt 文件读入二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15738311/