我写这段代码将txt文件读入2D数组并且它工作正常,但在我的输入txt中,我在输出中有一个8 * 8矩阵,向我显示我有一个37列
#include <stdio.h>
int main()
{
int c, i, j, row, col, nl, cr;
row = col = nl = cr = 0;
FILE *fp = fopen("image.txt", "r");
// Figure out how many rows and columns the text file has
while ((c = getc(fp)) != EOF)
{
if (c == '\n')
nl++;
if (c == '\r')
cr++;
col++;
if (c == '\n')
row++;
putchar(c);
}
col = (col - (nl + cr));
col = (int) (col/row);
printf("\nnumber of rows is %d\n", row);
printf("number of columns is %d\n\n", col);
return 0;
}
我的输入正常:
255 50 9 50 1 50 50 1
50 255 50 50 50 50 50 50
50 50 255 50 50 50 50 50
8 50 50 255 50 50 50 50
50 50 50 50 255 50 50 50
50 50 50 50 50 255 50 50
1 50 50 50 50 50 255 50
2 50 50 50 50 50 50 255
,输出图像为: 有人可以帮忙吗?
答案 0 :(得分:0)
这很有趣,我明白了 -
number of rows is 8
number of columns is 29
问题在于,由于使用了getc,你可以计算文本文件中实际字符的数量,当你读取255例如,那不是一个具有该值的单个字符时,它是3个字符值50(' 2'),53('5')和53('5')。你也会在这里计算空间(这可能就是为什么我得到了与你不同的结果)
你应该将它们作为整数读取(例如fscanf),或者根据可接受的分隔符(在这种情况下,我假设的空格和换行符)解析它们,然后相应地推进你的计数器。或者,您可以将文件压缩为二进制格式,并忘记所有带空格和换行的麻烦,每个字符一个字节。它们不会那么可读。
另请注意,您的代码假设每行有一个固定的列数,更好的是确保始终如此