2017-12-04 15 views
0

こんにちは!私は最長共通サブシーケンスの問題を解決しようとしています、そして、私は問題そのものとは何の関係もない問題にぶつかっています。 私のプログラムは正しい最終結果を示していないと思います。なぜなら、両方のシーケンスを正しく読み取っていないからです。ファイルから正しく読み取る方法

1つのファイルからシーケンスを読み込むメイン関数のコードです。 2番目のシーケンス)、ここに私はエラーがあると信じています。

int main(){ 
    FILE *file; 
    char c; 
    int m=0, n=0, flag=0; 
    file=fopen("test.txt","r"); 
    if(file==NULL){ 
     printf("Error opening file.\n"); 
     exit(0); 
    } 

    if(file){ 
     while((c=fgetc(file))!=EOF){ 
      if(c!=' ' && c!='\n' && flag==0) 
       m++; 
      if(c=='\n') 
       flag=1; 
      if(c!=' ' && c!='\n' && flag==1) 
       n++; 
     } 
    } 

    char X[m], Y[n]; 
    int i=0; 

    if(file){ 
     while((c=fgetc(file))!=EOF){ 
      if(c!=' ' && c!='\n' && flag==0){ 
       i++; 
       X[i]=c; 
      } 
      if(c=='\n'){ 
       flag=1; 
       i=0; 
      }    
      if(c!=' ' && c!='\n' && flag==1) 
       i++; 
       Y[i]=c; 
     } 
    } 
    int j; 
    for(i=0;i<m;i++){ 
      printf("%c | %c",X[i],Y[i]); 

    } 



    printf("Length of LCS is %d .\n", lcs(X, Y, m, n)); 

    return 0; 
} 

これは、イムは最初のシーケンスを印刷するとき、それは返すものです。 | 7 | É| Ŭ| ©| È| ³| | |

ごめんなさい。 は

+0

注: 'char c; ... while((c = fgetc(file))!= EOF){'、' int c; 'を使うのが最適です。 – chux

答えて

2

それはfgetc()戻りEOFまで実行されるため、最初のwhileループは、ファイルの内容をすべて消費を助けるために喜んで、誰のために事前にありがとうございます。 2番目のwhileループは、ファイルが使い果たされたためにまったく実行されません。配列X[]およびY[]は未初期化のままです。

file == NULLケースを処理した後は、魔法のようになっているかどうかを確認する必要はありません。NULL - if (file)ステートメントは役に立たないと言えます。

関連する問題