if (
(HM == 1 && Hn == 1 && (fp=fopen(CV11.asv,rb))==NULL) ||
(HM == 1 && Hn == 2 && (fp=fopen(CV12.asv,rb))==NULL) ||
(HM == 1 && Hn == 3 && (fp=fopen(CV13.asv,rb))==NULL) ||
(HM == 1 && Hn == 4 && (fp=fopen(CV14.asv,rb))==NULL) ||
(HM == 1 && Hn == 5 && (fp=fopen(CV15.asv,rb))==NULL) ||
(HM == 1 && Hn == 6 && (fp=fopen(CV16.asv,rb))==NULL) ||
(HM == 2 && Hn == 1 && (fp=fopen(CV21.asv,rb))==NULL) ||
(HM == 2 && Hn == 2 && (fp=fopen(CV22.asv,rb))==NULL) ||
(HM == 2 && Hn == 3 && (fp=fopen(CV23.asv,rb))==NULL) ||
(HM == 2 && Hn == 4 && (fp=fopen(CV24.asv,rb))==NULL) ||
(HM == 2 && Hn == 5 && (fp=fopen(CV25.asv,rb))==NULL) ||
(HM == 2 && Hn == 6 && (fp=fopen(CV26.asv,rb))==NULL) ||
(HM == 3 && Hn == 1 && (fp=fopen(CV31.asv,rb))==NULL) ||
(HM == 3 && Hn == 2 && (fp=fopen(CV32.asv,rb))==NULL) ||
(HM == 3 && Hn == 3 && (fp=fopen(CV33.asv,rb))==NULL) ||
(HM == 3 && Hn == 4 && (fp=fopen(CV34.asv,rb))==NULL) ||
(HM == 3 && Hn == 5 && (fp=fopen(CV35.asv,rb))==NULL) ||
(HM == 3 && Hn == 6 && (fp=fopen(CV36.asv,rb))==NULL) ||
(HM == 4 && Hn == 1 && (fp=fopen(CV41.asv,rb))==NULL) ||
(HM == 4 && Hn == 2 && (fp=fopen(CV42.asv,rb))==NULL) ||
(HM == 4 && Hn == 3 && (fp=fopen(CV43.asv,rb))==NULL) ||
(HM == 4 && Hn == 4 && (fp=fopen(CV44.wav,rb))==NULL) ||
(HM == 4 && Hn == 5 && (fp=fopen(CV45.wav,rb))==NULL) ||
(HM == 4 && Hn == 6 && (fp=fopen(CV46.wav,rb))==NULL) ||
(HM == 5 && Hn == 1 && (fp=fopen(CV51.wav,rb))==NULL) ||
(HM == 5 && Hn == 2 && (fp=fopen(CV52.wav,rb))==NULL) ||
(HM == 5 && Hn == 3 && (fp=fopen(CV53.wav,rb))==NULL) ||
(HM == 5 && Hn == 4 && (fp=fopen(CV54.wav,rb))==NULL) ||
(HM == 5 && Hn == 5 && (fp=fopen(CV55.wav,rb))==NULL) ||
(HM == 5 && Hn == 6 && (fp=fopen(CV56.wav,rb))==NULL)
)
{
fprintf(stderr,%s cannot open.\n,fn);
exit(2);
}
char filename[16];
sprintf(filename, CV%c%c.wav, HM+'0', Hn+'0');
これで filename にfopenするファイル名が得られるでしょう。
下記の例はお気に召しますか?(ただ、fn が何なのかが判らないのでこれでいいか不安)
~~~~
static char *Table[] ={
CV11.asv, CV12.asv, CV13.asv, CV14.asv, CV15.asv, CV16.asv,
CV21.asv, CV22.asv, CV23.asv, CV24.asv, CV25.asv, CV26.asv,
CV31.asv, CV32.asv, CV33.asv, CV34.asv, CV35.asv, CV36.asv,
CV41.asv, CV42.asv, CV43.asv, CV44.wav, CV45.wav, CV46.wav,
CV51.wav, CV52.wav, CV53.wav, CV54.wav, CV55.wav, CV56.wav,
};
if ((HM >= 1) && (HM <=5)) {
if ((Hn >= 1) && (Hn <=6)) {
fp =fopen(Table[(Hn -1) +(HM -1) *6], rb);
if (fp ==NULL) {
printf(stderr, %s cannot open.\n, fn);
exit(2);
}
}
}
回答ではないのですが、
ファイルポインタをみんなfpに代入しちゃってますけど
いいんでしょうか?
> ファイルポインタをみんなfpに代入しちゃってますけど
> いいんでしょうか?
え?なにか問題でも?
> ファイルポインタをみんなfpに代入しちゃってますけど
> いいんでしょうか?
こういうことかな…違ったらごめんなさいね。
たとえば、一番上の行の fopen が成功して CV11.asv が開けたとする。
そのファイルポインタが fp に入る。
それをクローズしないまま、次の行でもし CV12.asv が開けてしまったら
fp には CV12.asv のファイルポインタが入り、CV11.asv のポインタは
潰され、CV11.asv は開きっぱなしではないかと。
一番上の行が成功すればその時点で if 文が終了し、それ以降の条件は
評価されないので問題はありません、と。
VB もこういう仕様ならどんなに楽かと思う今日この頃。
どこかでopenできたらそこで評価が終了するんだから、問題ないよね?
なるほど・・・
奥の深いコードですね。
>どこかでopenできたらそこで評価が終了するんだから、問題ないよね?
VC++だとそのように動きますけど、言語としては式の評価の順番は決まってなかった
はずですよね。
いわゆる処理系依存の記述になるかと思います。
まあ、私も好んでこういうふうな動作を想定して書きますが、、、(^_^;;;
え? &&, || について、その評価順序が決まってない? そんなはずは...
オーバーロードしていなければ、いわゆる短絡評価されるよう決まってるはずですが。
すみません、間違いでした。m(_ _)m
http://www.microsoft.com/JAPAN/developer/library/default.asp?
URL=/japan/developer/library/vclang/_clang_precedence_and_order_of_evaluation.h
tm
評価順序を保証してます。
http://www.microsoft.com/JAPAN/developer/library/default.asp?
URL=/japan/developer/library/vclang/_clang_c_sequence_points.htm
でも、「はず」が3つも続いてちょっとビックリですね。(^_^;;;
VBでは、AndAlso、OrElseがあるようです。