プロが教える店舗&オフィスのセキュリティ対策術

FILE *ab_1,*ab_2,*ab_3,*ab_4,*ab_5,*ab_6,*ab_7,*ab_8,*ab_9,*ab_10,*ab_11,*ab_12,*ab_13,*ab_14,*ab_15,*ab_16;

ab_1=fopen("1.txt","w");
ab_2=fopen("2.txt","w");
ab_3=fopen("3.txt","w");
ab_4=fopen("4.txt","w");
ab_5=fopen("5.txt","w");



ab_15=fopen("15.txt","w");
ab_16=fopen("16.txt","w");

という作業をfor文で回せるようにしたいのですがどうしたらいいでしょうか?
自分で作ってみたのは

#include<stdio.h>
main()
{
int i;
char buf[256],file_name[256];
for(i=0;i<16;i++){
sprintf(buf,"ab_%d",i);
sprintf(file_name,"%d.txt",i);
FILE *buf;
buf = fopen(file_name,"w");
}


fprintf(ab_1,"test\n");

}

とやってみたのですが、実際にfprintfで出力しようとするとファイルポインタ ab_1 が定義されていません。みたいなエラーが出てしまいます。
sprintfで取った文字をファイルポインタにしようとしてるところがいけないんだとは思うのですが何かいい方法はないでしょうか?
環境はWindowsXP,VC++6です。

A 回答 (2件)

CとC++では変数を文字列のように扱うことはできません。



単純に、FILE構造体の配列を作るのがいいと思います。

FILE *ab[16];
...
ab[i] = fopen(file_name, "w");
...
のように。
コンパイルしていないので自信なしにしときますが、
方針はこれでいいはずです。
    • good
    • 1
この回答へのお礼

ありがとうございます。
ファイルポインタに配列使えることを知らなかったです。まだまだ勉強不足でした。

お礼日時:2004/02/02 22:25

buf = fopen(file_name,"w");


の buf って char になってますよね?
FILE *ab[16] のように配列にすればいいんじゃないでしょうか。
ab[i] = fopen(file_name,"w");
のような感じで。
    • good
    • 1

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