• 締切済み

別のファイルにあるレコードを各配列に格納したいです

ファイル"DATA.dat"にあるレコードを配列"Record"にそれぞれ格納するプログラム考えてみましたが、なかなか動いてくれません。何かアドバイスをください。 DATA.datの内容 0001 0010 0011 0100 0101 : : Record配列にレコードを格納するイメージ Record[0] <- 0001 Record[1] <- 0010 Record[2] <- 0011 Record[3] <- 0100 Record[4] <- 0101     :     : 考えたプログラム #include <stdio.h> #include <stdlib.h> void main() { FILE *File_pt; char Record[100]; int i; //TimeLineファイルをOpenする if ( (File_pt = fopen("DATA.dat", "r")) != NULL){ for(i = 0 ; i < 5 ; i++){ if( (fscanf(File_pt, "%s", Record[i])) == EOF){ printf("各レコード格納失敗\n"); exit(1); } } //////格納されたレコードを表示する for(i = 0 ; i < 5 ; i++){ printf("%s\n",Record[i]); } fclose(File_pt); }else{ printf("失敗\n"); exit(1); } } まだ初心者なんでおねがいします。

みんなの回答

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.3

まあ、有限で20件位しか取れないですが、直してみました。 #include <stdio.h> #include <stdlib.h> void main() { FILE *File_pt; char Record[20][5]; int i; mamset(Record, 0, sizeof(Record)); //TimeLineファイルをOpenする if ( (File_pt = fopen("DATA.dat", "r")) != NULL){ for(i = 0 ; i < 20 ; i++){ if( (fscanf(File_pt, "%s", Record[i])) == EOF){ printf("各レコード格納失敗\n"); exit(1); } } //////格納されたレコードを表示する for(i = 0 ; i < 20 ; i++){ printf("%s\n",Record[i]); } fclose(File_pt); }else{ printf("失敗\n"); exit(1); } }

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

#1です。補足です。 数は、適当なので、必要数動的に確保するなら、スタックなりリストなり必要に応じてデータ定義して下さい。

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

char Record[100]; を char Record[5][20];等にすると上手く行くでしょう。 但し、宣言した後 memset(Record, 0, sizeof(Record)); 等しておいた方がデバッグ簡単ですが。

nVIDIA
質問者

補足

シンプルに書き直してみました。 でもこれは DATA.dat のレコードのうち一つしか表示できません。 #include <stdio.h> #include <stdlib.h> void main() { FILE *File_pt; char Record[100]; char *Record_pt; int i; Record_pt = Record; //DATA.datを開きレコードをRecodの各要素にレコードを格納する if ( (File_pt = fopen("DATA.dat", "r")) != NULL){ for( i = 0 ; fgets(Record_pt, 50, File_pt) == NULL ; i++); printf("%s\n",Record_pt); //格納されたレコードを表示する fclose(File_pt); //TimeLineファイルを閉じる }else{ printf("失敗\n"); exit(1); } } そこで最初このように考えてみました。 #include <stdio.h> #include <stdlib.h> void main() { FILE *File_pt; char Record[100]; int i; //DATA.datを開きレコードをRecodの各要素にレコードを格納する if ( (File_pt = fopen("DATA.dat", "r")) != NULL){ for( i = 0 ; fgets(Record[i], 50, File_pt) == NULL ; i++); printf("%s\n",Record[i]); //格納されたレコードを表示する fclose(File_pt); //TimeLineファイルを閉じる }else{ printf("失敗\n"); exit(1); } } でも、fgets(Record[i], 50, File_pt)で Record[i] が *char でないからダメと文法エラーになります。 配列ってポインタの一種だから大丈夫だと思うのですが… こちらでも考えているのですが、なかなか理想的イメージになってくれません。 どこがNGでしょうか?

関連するQ&A