- 締切済み
別のファイルにあるレコードを各配列に格納したいです
ファイル"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); } } まだ初心者なんでおねがいします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- t_nojiri
- ベストアンサー率28% (595/2071)
まあ、有限で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); } }
補足
シンプルに書き直してみました。 でもこれは 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でしょうか?