读取2D阵列解决方案中的txt文件

时间:2013-09-22 11:16:37

标签: c

我写这段代码将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 

,输出图像为:enter image description here 有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

这很有趣,我明白了 -

number of rows is 8
number of columns is 29

问题在于,由于使用了getc,你可以计算文本文件中实际字符的数量,当你读取255例如,那不是一个具有该值的单个字符时,它是3个字符值50(' 2'),53('5')和53('5')。你也会在这里计算空间(这可能就是为什么我得到了与你不同的结果)

你应该将它们作为整数读取(例如fscanf),或者根据可接受的分隔符(在这种情况下,我假设的空格和换行符)解析它们,然后相应地推进你的计数器。或者,您可以将文件压缩为二进制格式,并忘记所有带空格和换行的麻烦,每个字符一个字节。它们不会那么可读。

另请注意,您的代码假设每行有一个固定的列数,更好的是确保始终如此