2016-09-11 5 views
-3

したがって、私はcsvファイルからいくつかのデータを読みたいと思います。Cでのファイル読み込みの不思議な動作

しかし、fgetsは私にwhileループでNULLを与え続けます。 whileループの外側でうまく動作します。

多分私はここで何かが分かりません。

編集:ここでは作業コードがあります:私はちょうどコード

int main(int argc, char *argv[]) 
{ 

FILE *input_file = fopen("free-zipcode-database-Primary.csv","r"); 
char buffer[1024]; 

if (input_file == 0) { 
    fprintf(stderr,"Cannot open input file.\n"); 
} 



int count = 0; // to skip the first line in csv that contains the titles 


while (1) 
{ 


    if (count == 0) 
    { 
     continue; 
    } 

    if (fgets(buffer, 1024, input_file) != NULL) 
    { 
     puts(buffer); 
     parseDataFromCSV(buffer); 
    } else { 
     break; 
    } 




    count++; 

} 


    fclose(input_file); 

    return 0; 
} 

編集をクリーンアップ。

FILE *input_file = fopen("free-zipcode-database-Primary.csv","r"); 
char buffer[1024]; 

if (input_file == 0) 
{ 
    fprintf(stderr,"Cannot open input file.\n"); 
} 

/* skip the first line in csv file */ 
fgets(buffer, 1024, input_file); 
while (1) 
{ 

    if (fgets(buffer, 1024, input_file) != NULL) 
    { 
     puts(buffer); 
     parseDataFromCSV(buffer); 
     bzero(buffer,1024); 
     break; 
    } else { 
     break; 
    } 


} 


fclose(input_file); 
+1

'が、 '(関数fgets(バッファ、1024、INPUT_FILE)== NULL)は' '=を持っている場合= '。それは目的ですか? – Downvoter

+0

最初の呼び出しで 'buffer'に何文字読み込まれますか?おそらく、EOLキャラクターが認識されず、すべてが1行にあるように見えますか?また、書かれた方法では、最初の行はループの外で読み込まれ、2行目は3行目以降は処理されずにスキップされます。 –

+0

@Downvoterはい、fgetsがNULLを返すかどうかをチェックすることですが、なぜそれがわかりません。コードを編集します。 – user234159

答えて

3

ループ中に無限ループがあります。

(関数fgets(バッファ、1024、INPUT_FILE)!= NULL)は `` `!=がある場合
if (count == 0) { 
    continue; 
} 
関連する問題