从文本文件中读取矩阵并将其存储在数组2D中

时间:2013-09-22 12:17:06

标签: c

我一直在尝试将矩阵输入存储在数组中的文本文件中,但它显示了我特有的输出。这是代码:

#include <stdio.h>

int main()
{
    int c, i, j, row, col, nl, cr;

    row = col = nl = cr = 0;

    FILE *fp = fopen("g.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);


    // read letters into array

    char array[row][col];

    if ( fp )
       {
        for ( ;; )
              {
            c = getc(fp);
                 if ( c == EOF )
                 {
                        break;
                 }
                 if ( c != '\n' && c != '\r' )
                 {
                        array[i][j] = c;

                    if ( ++j >= col )
                        {
                            j = 0;
                            if ( ++i >= row )
                            {
                                break;
                            }
                        }
                }
            }
        fclose(fp);
    }

    for ( i = 0; i < row; i++ )
    {
            for ( j = 0; j < col; j++ )
            {
                 putchar( array[i][j]);
            }
            putchar('\n');
    }
    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 

我的程序显示了这个输出:

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     $■( 1gÍuáþ09■   ı¤ıu"ÒávD   ê$[
►  ð²(     ♥       l    ►      ■   
  ê$[ ♥   l       ­²( O»ƒv[ 4■( Qõá
v♥   #õáv┬²║Oÿ|®v    ñ|®ve┬ív
 ■(     x■( ÿ|®v Ó²⌂    @■(  áƒv╚♀[ L
■( w¯ƒv‼   ê■( I┴ávÿ|®v↓┴áv~²║O
   Ó²⌂    \■( ■   ─ ( e┬ívÍ┬29►☺

显示输入文件,但问题是数组输出我不明白为什么它会显示这些字符。

2 个答案:

答案 0 :(得分:2)

迈克尔的评论是正确的,如果甚至编译,我会感到惊讶。您需要动态分配数组,如下所示:

char **array = malloc(sizeof(char *) * row)

每一行都像:

array[c] = malloc(sizeof(char) * col)

你必须免费释放每一行和数组。

看起来您正在尝试读取和存储整数值。请记住,当你开始工作时,你仍然需要转换字符值,如果是这样的话。

答案 1 :(得分:0)

这个怎么样: -

#include <stdio.h>
void main()
{
FILE *fopen(), *fp;
char c;
int i=0,j=0;
char file[50][50];
fp = fopen("abc.txt","r");
c = getc(fp) ;
while (c!= EOF)
{
file[i][j]=c;

    j++;
    c = getc(fp);

    if(j==50){
    i++;
    j=0;
    }
}
fclose(fp);
}