我必须编写一个程序来读取文本二进制图像 1 和 0,然后根据用户的选择对图像执行各种操作。我相信我对大部分程序都很好,我能够读取文件并显示它。 为了继续,我需要将图像保存到二维数组中,这就是我遇到的问题。
下面是我整个程序的一小部分示例,因为它的其余部分目前可以正常工作,这是我想弄清楚的部分,但是在继续搜索和观看视频之后,我终究无法弄清楚这个或在哪里我错了。
#define N 50
int imageArray [N][N];
int row, col;
int value;
char filename[30];
FILE *ptr_file;
printf("Enter the full name of the input file: ");
scanf("%s", filename);
ptr_file = fopen(filename, "r");
for(row = 0; row < N; row++){
for(col = 0; col < N; col++){
fscanf(ptr_file, "%d", &value);
imageArray[row][col] = value;
}
}
for(row = 0; row < N; row++){
for(col = 0; col < N; col++){
printf("%d", imageArray[N][N]);
}
printf("\n");
}
我试图保存到二维数组的图像都是 50x50 并且包含在 txt 文件中。
上面的代码当前输出全 0。图片背景由0组成,图片本身由1组成。
下面是我试图保存到数组的超小版本,想象一下它是 50x50!由于某种原因,我无法在此处粘贴完整图像,因为它重新格式化了它。它应该给出一个想法。
0000000
0001000
0011100
0111110
0011100
0001000
0000000
提前感谢您阅读这篇文章!
最佳答案
您的代码有两个问题。
正如 Mike P 所说,您应该将“%1d”与 fscanf() 一起使用,否则每个 fscanf() 调用都将读取整行,因为它将继续读取,直到第一个数字字符系列的末尾带有“%d”。
您的打印循环正在打印
imageArray[N][N]
而不是imageArray[row][col]
。
在实现这两个修复后,我的代码可以按预期运行。
int imageArray [N][N];
int row, col;
int value;
char filename[30];
FILE *ptr_file;
printf("Enter the full name of the input file: ");
scanf("%s", filename);
ptr_file = fopen(filename, "r");
for(row = 0; row < N; row++){
for(col = 0; col < N; col++){
fscanf(ptr_file, "%1d", &value);
imageArray[row][col] = value;
printf("%d %d\n", row, col);
}
}
for(row = 0; row < N; row++){
for(col = 0; col < N; col++){
printf("%d", imageArray[row][col]);
}
printf("\n");
}
作为附加说明,您应该检查 fscanf() 的返回以确保调用成功。如果你用你的原始代码这样做,它会给你一个很好的提示,让你知道第一个错误的位置。它还可用于检测无效的输入文件。
关于c - 如何读取文本文件图像并将其保存到数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49478802/