下記のさらなるまとまったコンパクトな書き方はあるでしょうか? – プログラミング – Home

下記のさらなるまとまったコンパクトな書...
 
通知
すべてクリア

下記のさらなるまとまったコンパクトな書き方はあるでしょうか?


ghy
 ghy
(@ghy)
ゲスト
結合: 23年前
投稿: 2
Topic starter  

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);
}


引用解決済
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

char filename[16];
sprintf(filename, CV%c%c.wav, HM+'0', Hn+'0');

これで filename にfopenするファイル名が得られるでしょう。


返信引用
島
 島
(@島)
ゲスト
結合: 23年前
投稿: 238
 

下記の例はお気に召しますか?(ただ、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);
}
}
}


返信引用
小悪魔恭子
 小悪魔恭子
(@小悪魔恭子)
ゲスト
結合: 23年前
投稿: 25
 

回答ではないのですが、
ファイルポインタをみんなfpに代入しちゃってますけど
いいんでしょうか?


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

> ファイルポインタをみんなfpに代入しちゃってますけど
> いいんでしょうか?

え?なにか問題でも?


返信引用
aetos
(@aetos)
Noble Member
結合: 6年前
投稿: 1480
 

> ファイルポインタをみんなfpに代入しちゃってますけど
> いいんでしょうか?

こういうことかな…違ったらごめんなさいね。

たとえば、一番上の行の fopen が成功して CV11.asv が開けたとする。
そのファイルポインタが fp に入る。
それをクローズしないまま、次の行でもし CV12.asv が開けてしまったら
fp には CV12.asv のファイルポインタが入り、CV11.asv のポインタは
潰され、CV11.asv は開きっぱなしではないかと。

一番上の行が成功すればその時点で if 文が終了し、それ以降の条件は
評価されないので問題はありません、と。

VB もこういう仕様ならどんなに楽かと思う今日この頃。


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

どこかでopenできたらそこで評価が終了するんだから、問題ないよね?


返信引用
小悪魔恭子
 小悪魔恭子
(@小悪魔恭子)
ゲスト
結合: 23年前
投稿: 25
 

なるほど・・・
奥の深いコードですね。


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 23年前
投稿: 178
 

>どこかでopenできたらそこで評価が終了するんだから、問題ないよね?

 VC++だとそのように動きますけど、言語としては式の評価の順番は決まってなかった
はずですよね。
 いわゆる処理系依存の記述になるかと思います。

 まあ、私も好んでこういうふうな動作を想定して書きますが、、、(^_^;;;


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 23年前
投稿: 1301
 

え? &&, || について、その評価順序が決まってない? そんなはずは...


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

オーバーロードしていなければ、いわゆる短絡評価されるよう決まってるはずですが。


返信引用
NEG(ねぐ)
 NEG(ねぐ)
(@NEG(ねぐ))
ゲスト
結合: 23年前
投稿: 178
 

 すみません、間違いでした。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があるようです。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました