我正在尝试从 txt 文件中读取整数并将它们存储在一维数组中。我尝试了几种方法,但无法正常工作。 我的文本文件在下面
1 2
2 1
3 2
2 1
1 2
2 1
3 2
2 1
1 2
2 1
3 2
2 1
这是我的代码
#include <stdio.h>
#include <stdlib.h>
int main(void) // usually we write void when main doesn't take args
{
int i;
int j;
/*matrix*/
int *mat = malloc((12* 2* sizeof ( int))); // no casting!
FILE *file;
file=fopen("test.dat", "r"); // extension file doesn't matter
if(!file) {
printf("File not found! Exiting...\n");
return -1;
}
for(i = 0; i < 12; i++)
{
for(j = 0; j < 2; j++)
{
if (!fscanf(file, "%d", &mat[i*2 + j])){
printf("error!\n");
break;
}
//fscanf(file, "%d", &mat[i*2 + j]);
printf("ok!\n");
printf("%d \t",mat[i*2 + j]); // mat[i][j] is more clean
}
printf("\n");
}
free(mat);
fclose(file);
return 0;
}
感谢您的帮助! ******更新**** 我发现第一个问题是我无法读取文件,但后来我发现我只能打印一个值 1 而不是那里的 24 个值
./print_mat
ok!
1 error!
error!
error!
error!
error!
error!
error!
error!
error!
error!
error!
error!
最佳答案
代码很好。 段错误
的可能原因是文件无法打开(可能找不到文件)。
如果文件中包含的数据没有您预期的那么多,则可能会出现问题。
你可以这样检查:
#include <stdio.h>
#include <stdlib.h>
int main(void) // usually we write void when main doesn't take args
{
int i;
int j;
/*matrix*/
int *mat = malloc((12* 2* sizeof ( int))); // no casting!
FILE *file;
file=fopen("test.txt", "r"); // extension file doesn't matter
if(!file) {
printf("File not found! Exiting...\n");
return -1;
}
for(i = 0; i < 12; i++)
{
for(j = 0; j < 2; j++)
{
if (!fscanf(file, "%d", &mat[i*2 + j]))
break;
printf("ok!\n");
printf("%d\n",mat[i*2 + j]); // mat[i][j] is more clean
}
}
free(mat);
fclose(file);
return 0;
}
Why not to cast what malloc
returns .
[编辑]
更好的错误输出可以像这样完成:
if(!file) { // equivalent to file == NULL
perror("File not found! Exiting...\n");
return -1;
}
现在,当文件无法打开时,你会得到我在里面的输出 perror
以及错误消息。
我试图打开一个不存在的文件并得到了
File not found! Exiting...
: No such file or directory
可能该文件与主文件不在同一目录中。
感谢 Olaf Dietsche 和 pmg 的评论。
正如另一个答案所述,您始终可以使用调试器
来查找问题出在哪里。
很多人用valgrind .
正如 OP 发现的那样,当值由逗号而不是空格分隔时,scanf()
将无法解析文件。
关于c - 如何从文件中读取整数到 C 中的一维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23650144/