とっておきの「夜食」教えて下さい

例えば、"input_1.dat", "input_2.dat" ... "input_9.dat","input_a.dat" ...
"input_z.dat"のように、
ファイル名が一定のフォーマットに従った
入力ファイル群があるとします。
(ファイル内の数値の配置フォーマットも一緒)

これらのファイルの中身を
fopen→fscanf→fcloseを使って読みこむとき、

FILE *fin1, *fin2;
fin1 = fopen("input_1.dat","r");
fin2 = fopen("input_2.dat","r");
...

のようにファイル名をひとつひとつ読みこまず、
for, whileなどを用いて簡単に書けないでしょうか?

A 回答 (3件)

FILE *fp;


char *moji = "123456789abcdefghijklmnopqrstuvwxyz";
char fname[20];
int i;

for(i = 0; i < 9+26; i++)
{
sprintf(fname, "input_%c.dat", moji[i]);

fp = fopen(fname, "r");

/* fscanf での処理 */

fclose(fp);
}
    • good
    • 0
この回答へのお礼

sprintfという関数があるとは知りませんでした。
解答ありがとうございました。

お礼日時:2005/07/28 01:13

もう少し表現を変えると、こういう方法もあります。


ただし、「ファイル名が一定のフォーマットに従っている」というのは、#1 の方の回答の方が良く反映されていますが。

char *fileName[] = { "input_1.dat",
"input_2.dat",
"input_3.dat",
....
"input_z.dat",
NULL /* 終わりの印 */
};

for(i = 0; fileName[i]; i++)
{
fp = fopen(fileName[i], "r");
...
fclose(fp);
}
    • good
    • 1
この回答へのお礼

fopenのファイル名入力には、そのような方法も
あるのですね。
解答ありがとうございました。

お礼日時:2005/07/28 01:16

#1です。



後で思ったのですが、for文のところは、
for(i = 0; moji[i] != '\0'; i++)
の方が汎用性があるかも。

要するにfopenするファイル名を組み立てて、それを引数にすればよいのです。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報