2016-10-05 12 views
1

サイズ/行サイズが不明なファイルを読み込むプログラムを作成しようとしていますが、改行文字を検出する際に問題があります。ファイルを読むときに改行をチェックするのに問題があります

私はプログラムを実行すると、whileループ内のラインポイントの最後には到達せず、readFileで実行されます。私がそれぞれの文字を印刷すると、いくつかの未知の文字が印刷されます。

私はchをint値に設定し、\nの比較のためにcharに型キャストするように設定しようとしました。それはEOF状態にも達していないので、何が起こっているのか分かりません。

コード:

void readFile(FILE* file) 
{ 
    int endOfFile = 0; 
    while (endOfFile != 1) 
    { 
     endOfFile = readLine(file); 
     printf("%d\n", endOfFile); 
    } 
} 

int readLine(FILE* file) 
{ 
    static int maxSize = LINE_SIZE; 
    int currentIndex = 0; 
    int endOfFile = 0; 
    char* buffer = (char*) malloc(sizeof(char) * maxSize); 
    char ch; 

    do 
    { 
     ch = fgetc(file); 
     if ((ch != EOF) || (ch != '\n')) 
     { 
      buffer[currentIndex] = (char) ch; 
      currentIndex += 1; 
     } 

     if (currentIndex == maxSize) 
     { 
      printf("Reallocating string buffer"); 
      maxSize *= 2; 
      buffer = (char*) realloc(buffer, maxSize); 
     } 
    } while ((ch != EOF) || (ch != '\n')); 

    if (ch == EOF) 
    { 
     endOfFile = 1; 
    } 

    parseLine(buffer); 
    free(buffer); 

    return endOfFile; 
} 

誰かが私にはかなりの時間のために、この問題に引っかかってきたので、非常に高く評価されるだろうという私を助けることができれば。前もって感謝します。

答えて

5
(ch != EOF) || (ch != '\n') 

これは常に該当します。

ifwhileの両方に&&(AND)が必要です。それ以外の場合は停止しません。

+0

私はそれを見ていないとは思わない。私は時間制限の後に正しいとマークします。 – ReallyGoodPie

0

はちょうどこの定型規格は悪い考えである場合に

int ch; /* important, EOF is -1, not in the range 0-255 */ 
FILE *fp; 

/* double brackets prevent warnings about assignment in if */ 
while ((ch = fgetc(fp)) != EOF) 
{ 
    /* we now have a valid character */ 

    /* usually */ 
    if(ch == endofinputIlike) 
    break; 
} 
/* here you have either read all the input up to what you like 
    or skip because of EOF. usually you will set N or something, 
    or if N == 0 it was EOF, or we can test ch for EOF */ 

一般的に割り当てを構築使用していますが、この特定のスニペットは、すべての経験豊富なCプログラマが瞬時にそれを認識するように慣用的です。

関連する問題