• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:欠損データをgotoでスキップしたい)

欠損データをgotoでスキップしたい

このQ&Aのポイント
  • 番号のついたデータ群を処理するために、欠損データをスキップする方法を求めています。
  • goto文を使用して4番の欠損データをスキップしようとしていますが、うまくいきません。代替の方法を教えてください。
  • 具体的には、1から5までの連続した番号のデータを処理するプログラムで、欠損がある場合に処理をスキップしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.2

for( i = 1; i <= 5; i++){  sprintf(input_file,"./testin/%d.txt",i);  if((fi = fopen(input_file,"r")) == NULL){   puts("Error:cannot open input file \n");  } else {   printf("input_file=%s\n", input_file);   fclose(fi);  } } ではダメなんでしょうか? # if文の条件を逆にするかどうかは…好みの問題ですかねぇ。 # 私の場合は、失敗の時にelseでエラー処理…という書き方する方が多いですね。

rkkysh
質問者

お礼

教えていただいたやり方を参考にして、なんとかforとif, elseですっきりしたプログラムを書くことができました。ありがとうございます。

その他の回答 (3)

回答No.4

そういう時には、continueです。 #include <stdio.h> #include <stdlib.h> #include <math.h> int main(void){ FILE *fi,*fo; int i; for(i=1;i<=5;i++){ char input_file[32]; sprintf(input_file,"./testin/%d.txt",i); if((fi=fopen(input_file,"r"))==NULL){ puts("Error:Cannot open input file\n"); continue; } printf("input_file=%s\n",input_file); fclose(fi); } return 0; }

回答No.3

既に回答があるように、goto は使わなくても処理できますし、そのために、if には else というものがあるということです。 ただ、提示されたプログラムが、Error:cannot open input file で止まるというのは、ちょっと別の問題で、「オープンに失敗したファイルをクロース使用とすると、ものによっては、おかしな事が起こる」と、そういう取り決めになっているので、おそらくそれが直接の原因だと思います。 なので、label2: を、fclose() の後ろに持って行けば、とりあえず、動くのではないかと思います。 ※もちろん、この場合なら、goto を使わない書き方が主流です。

rkkysh
質問者

お礼

Error cannot open file はという文はダテではないのですね。C言語というものは奥が深いと思います。ありがとうございました。 

  • maiko0318
  • ベストアンサー率21% (1483/6969)
回答No.1

for( i = 1; i <= 5; i++){  char input_file[32];  sprintf(input_file,"./testin/%d.txt",i);  if((fi = fopen(input_file,"r")) == NULL){   puts("Error:cannot open input file \n");  }  else{   printf("input_file=%s\n", input_file);  }  fclose(fi); } return 0; でいいかな

関連するQ&A

専門家に質問してみよう