2013-09-22 70 views
0

我写这段代码来读取一个txt文件到一个二维数组中,它的工作正常,但在我的输入文本文件中我有一个8 * 8的矩阵输出给我看, 37周的cols在二维数组解决方案中读取txt文件

#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 有人能帮助吗?

+0

37 = 8 * 8 + 1 !!!!!!!噢,我的猜测 – Butterflay

回答

0

这很有趣,我得到 -

number of rows is 8 
number of columns is 29 

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

你应该将它们读为整数(例如fscanf),或者根据可接受的分隔符(空格和在这种情况下,我认为换行符),然后才能相应地提前计数。或者,您可以将文件压缩为二进制格式,并且不用空格和换行符来处理所有麻烦,每个字符一个字节。尽管如此,它们不会是可读的。

另外请注意,您的代码假设固定的列每行数,一定要把它总是如此