从textfile

时间:2017-02-27 06:52:42

标签: c

#include <stdio.h>

int main ()
{
   FILE *fp;
   int c;
   int n = 0;
   char array[10][10];
   int i=0,j=0;
   fp = fopen("g.txt","r");
   if(fp == NULL) 
   {
      perror("Error in opening file");
      return(-1);
   }
   do
   {
      c = fgetc(fp);
      if( feof(fp) )
      {
         break ;
      }
    if(c=='\n'){
     array[i][j]=c;
     i++;
     j=0;
    }
    j++;

   }while(1);

   fclose(fp);
    for(i=0;i<10;i++){
    for(j=0;j<10;j++){
        printf("%c ",array[i][j]);}
    printf("\n"); }

   return(0);
}

您好,我正在尝试从文本文件中获取矩阵(特定于字符矩阵并希望存储在动态数组中(我知道它在我的示例中不是动态的,但是知道我只是尝试在确定的矩阵中执行)。但是我的代码不能正常工作。

我试图将所有字符从矩阵放到我的数组中并确定字符是否为'\ n'然后在下一个循环中转到下一行并将init列归零。

理论上它似乎应该可行,但它打印出一堆无意义的符号,似乎无法正常工作。 我误会哪些部分?

编辑我要测试的文本文件:

Hello, I am trying to get a matrix from a text file(character matrix specifically and wants to store in dynamic ar
ray(I know it is not dynamic in 
my example but for know i just try to do in determined matrix) . But my code doesn't work as it should.

它没有完全正确打印。喜欢笑打印出来,但“ul”没有。 d在新行中。(linux终端)

如何打印= http://imgur.com/a/7WYgs

2 个答案:

答案 0 :(得分:0)

您可能需要更改此部分:

if(c=='\n'){
  array[i][j] = c;
  i++;
  j = 0;
}

if(c=='\n'){
  i++;
  j = 0;
} else {
  array[i][j] = c;
  j++;
}

这意味着如果字符是新行,请移至下一行,否则将其保存在数组中。

答案 1 :(得分:0)

只有在遇到换行符时才会在数组中存储内容。

我会将循环重写为

while ((c = fgetc(fp)) != EOF)
{
    if(c!='\n'){
     array[i][j]=c;
     j++;
    }
    else
    {
      i++;
      j = 0;
    }
}

fgetc在feof()AND ferror()上返回EOF,因此如果存在硬盘问题,您将不会有无限循环。