2017-10-10 6 views
0

"#"で始まるすべての行をスキップしようとしていますが、現在のコードが4番目のコメントに当たったとき以外は動作しているようですが、私は必要です。私がこれを証明したやり方は、2枚の写真であり、1つはコメントの後に余分な入力が加えられ、プログラムは正しい出力を提供し、もう1つは正しい入力ではあるが出力が間違っている(私は余分な入力なしで入力を使用する必要があるライン)。 はまた、私は問題が発生していたコードのセクションを添付しています。あなたの助けをありがとう!C fgetsでcontinueが複数の行をスキップしています

enter image description here

正しい出力、txtファイルに間違って追加された新ライン

enter image description here

コード:

a = 0 ;                      
while(fgets(line, sizeof(line),fp) != NULL)             
{ 
    if (line[0] == '#') 
    { 
    continue; 
    } 
    else if (MAX_X==0 && MAX_Y==0) 
    { 
     if ((sscanf(line,"%d %d", &MAX_X, &MAX_Y)==2) && MAX_X>0 && MAX_X <= 1000 && MAX_Y>0 && MAX_Y<=1000){ 
      continue; 
     } 
    }else if (NUM_PT==0) 
    { 
     if ((sscanf(line, "%d", &NUM_PT)==1)&& NUM_PT>0 && NUM_PT<=1000) 
      continue; 
    } 
    else if((fscanf(fp,"%d %d", &X_COORD[a], &Y_COORD[a]))&& X_COORD[a]>=0 && X_COORD[a]<=MAX_X && Y_COORD[a]>=0 && Y_COORD[a]<= MAX_Y) 
    { 
     a++; 
     continue; 

    } 
    else if(strcmp(line, "")==0) 
    { 

     return -1; 

    } 
} 
+2

スタックオーバーフローへようこそ!コードを画像ではなくプレーンテキストとして投稿します。コードの書式設定のヘルプについては、https://stackoverflow.com/help/formattingを参照してください。 – Barmar

+2

'関数fgets()'入力に改行を含みます。 'line'は' "\ n" 'だから' strcmp(line、 "")== 0は空白行には当てはまりません。 – Barmar

+1

なぜ 'sscanf()'の代わりに 'fscanf() '第3の' else if'では? – Barmar

答えて

0

あなたが行でエラーが発生している

else if((fscanf(fp,"%d %d", &X_COORD[a], &Y_COORD[a]))&& X_COORD[a]>=0 && X_COORD[a]<=MAX_X && Y_COORD[a]>=0 && Y_COORD[a]<= MAX_Y) 
{ 
    a++; 
    continue; 

} 

あなただけのLINEパラメータをスキャンして、代わりに、このラインからのスキャンパラメータの新しい行をスキャンします。

関連する問題