我正在学习C,但是我在练习中遇到问题,我有一个文件,并且只想将数字保存在数组中,但是我不知道如何忽略带有rowX字的列。
文件示例。
row1 1 2 4 6
row1 3 2 3 7
row1 4 3 7 6 2
row2 2 3 5 6 4
row2 1 1 8
row2 5 3 4 4 4
row3 1 4 3 2 3 5
row3 6 1 7
row3 7 1 9
数组的维度对应于总数的行数和最长行的列,但我不知道如何提取该信息。
在其他练习中,他们在文件中仅包含数字,我使用了此代码,但在这种情况下我不知道如何修改它。
FILE *f;
f = fopen("example.txt","r");
if (f == NULL)
{
printf("\nERROR\n");
return -1;
}
int matrix[row][col];
while(1)
{
if (feof(f))
break;
for (int i = 0; i < row; ++i)
{
for (int j = 0; j < col; ++j)
{
fscanf(f,"%d\n", &matrix[i][j]);
}
}
}
对于该示例,我考虑将空白添加0以获得以下矩阵:
1 2 4 6 0 0
3 2 3 7 0 0
4 3 7 6 2 0
2 3 5 6 4 0
1 1 8 0 0 0
5 3 4 4 4 0
1 4 3 2 3 5
6 1 7 0 0 0
7 1 9 0 0 0
但是我不知道如何实现它,希望你们能帮助我或就如何解决这个问题给我建议
答案 0 :(得分:0)
此示例应能像能够预先初始化矩阵一样工作,否则将需要对其进行修改。
您可以做什么:
1)将文件读入缓冲区,可以解析出文件的row *部分。
2)在缓冲区中找到最大的行(编号最多的那一行,并找到行数
3)初始化矩阵
4)将缓冲区解析为矩阵
int c;
int seen = 0;
int column = 0;
int row = 0;
while ((c = getc(f)) != EOF){
if(seen == 0 && c == ' '){
seen = 1;
} else if(seen == 1 && c != ' '){
matrix[row][column] = c;
column = column + 1;
} else if(c == '\n' || c == '\r\n'){
seen = 0;
column = 0;
row = row + 1;
}
}