ページ 11

ファイル操作について

Posted: 2007年7月24日(火) 09:20
by hana
おはようございます。
ファイル操作について勉強しているのですが、分からないところがあってメールしました。
どなたか助言をお願いします。

プログラムの内容は、テキストファイル(タブで区切られた10進数の数値が64個)を読み込んできて
プログラムの中でテキストファイルの数値の順序を入れ替えるものです。(des暗号のs-boxなんですが・・・)

1つのテキストファイルの中身を入れ替えるところまではできたのですが、同様のテキストファイルが8個あった
場合の処理の方法がいまいち分かりません。

自分でやっててもコンパイル通らないだろうなぁ・・・とおもいつつ、
8個のテキストファイルの名前を1.txt、2.txt、3.txt・・・8.txt、としてfor文で回してみましたが
当然うまくいきませんでした。(あさはかでした。)
for(i=1;i<3;i++){
    fp = fopen("i.txt","r");
    for(j=0;j<64;j++){
    fscanf(fp,"%d",&s[j]);
}
fclose(fp);
このように複数のファイルを準備して同じ処理をする場合の方法を教えてください。

Re:ファイル操作について

Posted: 2007年7月24日(火) 09:40
by バグ
単純に配列を増やせばいいのではないでしょうか?
例えば、2次元配列を使って格納するとか…

Re:ファイル操作について

Posted: 2007年7月24日(火) 09:53
by keichan
"i.txt"はいつまで経っても"i.txt"になります。
あと、for文の外で fclose してますがfor中に入れないと
最後にオープンしたファイルしか閉じません。
char filename[32] = {'\0'};
for( i = 1; i < 3; ++i ) {
	sprintf(filename, "%d.txt", i);
	fp = fopen(filename, "r");
	...
	fclose(fp);
}

Re:ファイル操作について

Posted: 2007年7月24日(火) 11:22
by hana
バグさん、keichanさんありがとうございます。
確かに配列を2次にして考えればいけそうです。(^_^)v

char filename[32] = {'\0'};
for( i = 1; i < 3; ++i ) {
sprintf(filename, "%d.txt", i);
fp = fopen(filename, "r");
 ↑
あと、keichanさんのような方法があるとは知りませんでした。

sprintfの機能は知ってても、ほかの構文と組み合わせて使うのって、ひらめき的なものがあるんですかね?
(経験もない私が言うのもなんですが・・・)

お二人の助言を参考にがんばります。

Re:ファイル操作について

Posted: 2007年7月24日(火) 11:23
by hana
すみません、「質問」ではなくて「お礼」です。