• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイル入力方法)

C言語のファイル入力方法

このQ&Aのポイント
  • C言語のファイル入力について教えてください
  • プログラムでは、最初の3行を無視し、4行目からの数値データを配列に格納します
  • 数値データは最大100行、2列固定です。8行目の--------以降は無視します

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

  • ベストアンサー
  • hitomura
  • ベストアンサー率48% (325/664)
回答No.2

#1ですが、ごめんなさい。回答にミスがありました。 でもこうしたらよくね?版の if(cnt<=3) break; は、 if(cnt<=3) continue; の間違いでした。

eliteyoshi
質問者

お礼

ご回答ありがとうございます。以下のように作成したらできました。 こうしたらよくね?版の方がすっきりしますね。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define END_OF_DATA "-----------" int main(){ int i,cnt=0,N=0,a[100],b[100]; char s[256]; FILE *fpi; if((fpi=fopen("data_goo5.txt","r"))==NULL){ fprintf(stderr,"ファイルを開けません\n"); exit(1); } while(fgets(s,256,fpi) != NULL){ cnt++; if(cnt<=3){ continue; } else if(strncmp(s, END_OF_DATA, strlen(END_OF_DATA))==0){ continue; } else{ sscanf(s,"%d %d",&a[N],&b[N]); N++; } } printf("データ行数:%d\n\n",N-1); for(i=0;i<N-1;i++){ printf("%d %d\n",a[i],b[i]); } fclose(fpi); return 0; }

eliteyoshi
質問者

補足

お礼のソールコードを間違えました。-----------を検知したらbreakでループから抜け出さないといけませんね。 #include <stdio.h> #include <stdlib.h> #include <string.h> #define END_OF_DATA "-----------" int main(){ int i,cnt=0,N=0,a[100],b[100]; char s[256]; FILE *fpi; if((fpi=fopen("input.txt","r"))==NULL){ fprintf(stderr,"ファイルを開けません\n"); exit(1); } while(fgets(s,256,fpi) != NULL){ cnt++; printf("%d\n",cnt); if(cnt<=3) continue; if(strncmp(s, END_OF_DATA, strlen(END_OF_DATA))==0) break; sscanf(s,"%d %d",&a[N],&b[N]); N++; } printf("データ行数:%d\n\n",N); for(i=0;i<N;i++){ printf("%d %d\n",a[i],b[i]); } fclose(fpi); return 0; }

その他の回答 (1)

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

# 以下の回答は必要な部分のみ抜き出しています とりあえず版なら、 if(cnt>3){ if(strncmp(s, "-----------", 11)==0) break; sscanf(s,"%d %d",&a[N],&b[N]); N++; } でもこうしたらよくね?版なら // #include文の後に以下を挿入 #define END_OF_DATA "-----------" // ...(中略)... while(fgets(s,256,fpi) != NULL){ //printf("%s",s); cnt++; if(cnt<=3) break; if(strncmp(s, END_OF_DATA, strlen(END_OF_DATA))==0) break; sscanf(s,"%d %d",&a[N],&b[N]); N++; } // ...(以下略)...

関連するQ&A