• ベストアンサー

連番のファイルを何個も開きたい

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です。

質問者が選んだベストアンサー

  • ベストアンサー
  • liar_adan
  • ベストアンサー率48% (730/1515)
回答No.1

CとC++では変数を文字列のように扱うことはできません。 単純に、FILE構造体の配列を作るのがいいと思います。 FILE *ab[16]; ... ab[i] = fopen(file_name, "w"); ... のように。 コンパイルしていないので自信なしにしときますが、 方針はこれでいいはずです。

sin11
質問者

お礼

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

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

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

すると、全ての回答が全文表示されます。
ご祝儀のお返しについて考える
このQ&Aのポイント
  • ご祝儀やお祝いを贈ると、返礼が期待されます。返されることで、経済が回り、一種のお礼のルールとなっています。
  • しかし、返されることで得られるものは必要ではないものもあり、そのような無駄な感じに疑問を感じることもあります。
  • もし返礼を望まない場合は、少額のご祝儀を贈ることも一つの方法です。
回答を見る

専門家に質問してみよう