プロが教えるわが家の防犯対策術!

C言語の初歩的な質問です。

fopenでtextファイルを複数開きたいんですけど
どのようにすればよいかわかりません。

感覚的には

for(i=1;i<11;i++){
FILE*fpi;
fpi=fopen("i.txt","r");
while((fscanf(fpi,"%s",&score[i]))!=EOF) {
};

のようにしたいんです。
もし無理ならばほかに何か方法はありませんか?

わかりにくい質問ですいませんが
どなたか教えてください。

A 回答 (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");
};
    • good
    • 0

同時に複数のファイルを開きたいのでしょうか?


それならば開きたいファイルの数だけ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 );
}
    • good
    • 0

多分"1.txt"、"2.txt"...と言うファイルを読み込みたいのだと思いますが。


>fpi=fopen("i.txt","r");
"i"のキャラクタコードと変数がごっちゃになってます。
答えを書くとmatsu008様の課題消化にならないのでここまでにしておきます。
    • good
    • 0

>複数開きた


開いたものは使ったと閉じましょう。
どこで閉じているのですか? 閉じてませんよね。
開いて、使って、閉じる
この繰り返しでいいでしょう。

fpiとはfp1、fp2、・・・というつもりですか?
貴方の書き方ではそのようになりません。
私が、上で言ったように閉じていれば同じ変数で処理できます。

"i.txt"も1.txt、2.txt、・・・というつもりですか?
これもできません。
もし、そのようなファイル名でしたら、整数を文字列に変換してドッキングしてください。
    • good
    • 0

まあ、少々お小言を言うと1つのプログラムが同時に3つ以上のファイルを開く事は、あんまりソフトウェアの設計上良く有りません。



多分マージの処理をしても2つのファイルを読み込んでマージしたら、その読んだファイルは閉じるでしょう?

とりあえず、work用に1つreadwrite設定でファイルを開けて、readしたファイルをそのまま追加して行って、最後に先頭にseekして先頭に戻ってから処理したって、ファイルポインタは2つでどうにかなりますけどね。
    • good
    • 0

確認してないですけどそれで開けませんでした?

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!