【发布时间】:2017-06-19 11:03:32
【问题描述】:
我有一个这样的文本文件:
3 3 0
2 3 5
3 8 9
4 5 6
我想把这些数字放到一个矩阵中。 第一行是为矩阵创建 malloc 的行数和列数。 然后,下一行是矩阵上的数字。 我有这个代码:
int mat[3][3];
int i, j;
FILE *fp;
char c;
if((fp = fopen("texto.txt", "r")) == NULL){
printf("Error al abrir el archivo");
return -1;
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
mat[i][j]=0;
}
}
i = 0;
while (1)
{
if (feof(fp))
break;
fscanf (fp, "%[^\n]%d %d %d", &mat[i][0], &mat[i][1], &mat[i][2]);
i++;
}
fclose(fp);
for(i=0;i<3;i++){
for(j=0;j<3;j++){
printf("%d ", mat[i][j]);
}
printf("\n");
}
(对不起,西班牙线)
我没有写 malloc,因为我只是想看看我是否正确地创建了矩阵,知道这是一个 3x3。
所以问题是我不知道如何从文本文件的第二行制作矩阵,并且不使用第一行。
谢谢!
【问题讨论】:
-
为什么不想使用第一行?您需要阅读它才能知道矩阵有多大
-
if (feof(fp))- 阅读feof的规范非常仔细。这行错了! -
@Olaf 这真的是一个棘手的问题,我不知道我是否真的能从规范中理解它......可能值得一读并提供一些解释stackoverflow.com/questions/5431941/…
-
@M.DEZ:不,不是!这是完全错误的。仅仅因为代码出现可以运行,并不意味着它是正确的!
-
@M.DEZ 为什么不检查
fscanf()的返回值?尝试输出它,您会发现您对feof()的使用不是“工作正常”。