C 将.txt文件读入二维数组
我有一个文本文件,如下所示:C 将.txt文件读入二维数组,c,file-io,C,File Io,我有一个文本文件,如下所示: 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; }
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++;
}
我想读入一个二维整数数组。问题是该文件没有提供有关二维数据的维度的信息。我试着这样做:
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
指针,以便读取下一个值
或者,您也可以通过一次读取一个字符来创建一个简短的函数来消除空白。你可以在那里处理换行。阅读直到遇到非空白字符,然后使用ungect
将该字符放回流中。大概是这样的:
// 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);
}
可能与如何将数据文件输入2D数组()1重复。制作文件的
mmap
,2。扫描换行符(一维)和换行符之间的空格(二维)。3.分配内存。4.读取数据。sscanf的问题在于,它不像fscanf那样跟踪下一步要读取的字符的位置。好的一点-就其本身而言,它不是一个完整的解决方案。您可以使用strtok
标记字符串。然后在每个令牌上使用strtol
,而不是sscanf
。哦,实际上您不需要strtok
=),因为strtol
可以在解析值后返回指向字符串其余部分的指针。