- ベストアンサー
C言語の初歩的な質問です。
C言語の初歩的な質問です。 fopenでtextファイルを複数開きたいんですけど どのようにすればよいかわかりません。 感覚的には for(i=1;i<11;i++){ FILE*fpi; fpi=fopen("i.txt","r"); while((fscanf(fpi,"%s",&score[i]))!=EOF) { }; のようにしたいんです。 もし無理ならばほかに何か方法はありませんか? わかりにくい質問ですいませんが どなたか教えてください。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ファイル名が00001.txtなどだとして, FILE *fpi; char buff[256]; for(i=1;i<11;i++){ sprintf(buff,"%05s.txt", i); fpi=fopen(buff,"rt"); while((fscanf(fpi,"%s",&score[i]))!=EOF); fclose(fpi); }; ファイルを開いたままにするなら FILE *fpi[10]; char buff[256]; for(i=0;i<10;i++){ sprintf(buff,"%05s.txt", i+1); fpi[i]=fopen(buff,"rt"); };
その他の回答 (5)
同時に複数のファイルを開きたいのでしょうか? それならば開きたいファイルの数だけFILE*を用意してやればよいかと。 FILE *fp [ 10 ]; const char *filename [ ] = { "file1.txt", "file2.txt", ... }; for ( int i = 0 ; i < 11 ; i ++ ) { fp [ i ] = fopen ( filename [ i ], "r" ); ... } 不完全ですがこんな感じでできると思います。ただし、同時に開ける数には環境ごとに制限があるので、無制限に開けるわけではありません。 同時でなくてもいいから複数開きたいならば、何回もfopenを呼び出せばそれで済みます。 FILE *fp; const char *filename [ ] = { "file1.txt", "file2.txt", ... }; for ( int i = 0 ; i < 11 ; i ++ ) { fp = fopen ( filename [ i ], "r" ); ... fclose ( fp ); }
- chubou3
- ベストアンサー率23% (264/1130)
多分"1.txt"、"2.txt"...と言うファイルを読み込みたいのだと思いますが。 >fpi=fopen("i.txt","r"); "i"のキャラクタコードと変数がごっちゃになってます。 答えを書くとmatsu008様の課題消化にならないのでここまでにしておきます。
- Hirorin_20
- ベストアンサー率20% (136/648)
>複数開きた 開いたものは使ったと閉じましょう。 どこで閉じているのですか? 閉じてませんよね。 開いて、使って、閉じる この繰り返しでいいでしょう。 fpiとはfp1、fp2、・・・というつもりですか? 貴方の書き方ではそのようになりません。 私が、上で言ったように閉じていれば同じ変数で処理できます。 "i.txt"も1.txt、2.txt、・・・というつもりですか? これもできません。 もし、そのようなファイル名でしたら、整数を文字列に変換してドッキングしてください。
- t_nojiri
- ベストアンサー率28% (595/2071)
まあ、少々お小言を言うと1つのプログラムが同時に3つ以上のファイルを開く事は、あんまりソフトウェアの設計上良く有りません。 多分マージの処理をしても2つのファイルを読み込んでマージしたら、その読んだファイルは閉じるでしょう? とりあえず、work用に1つreadwrite設定でファイルを開けて、readしたファイルをそのまま追加して行って、最後に先頭にseekして先頭に戻ってから処理したって、ファイルポインタは2つでどうにかなりますけどね。
- koi1234
- ベストアンサー率53% (1866/3459)
確認してないですけどそれで開けませんでした?