input直後の判定No.02703
haru さん 01/11/28 13:34
 
いつも、御世話様です。早速なんですが、

while ( 1 ){
$a = input( 〜〜〜 );
ifによる判定
}

というマクロで、ifによる判定の箇所に

1.if ( !result ) break;
2.if ( $a  == "") break;
3.if ( !result || $a == "") break;

の中の、1か2を指定した時は break できましたが、3ではできま
せんでした。
仕様でしょうか?

よろしくお願いします。

[ ]
RE:02703 input直後の判定No.02704
EMiCC さん 01/11/28 13:39
 
>1.if ( !result ) break;
>2.if ( $a  == "") break;
>3.if ( !result || $a == "") break;
>
>の中の、1か2を指定した時は break できましたが、3ではできま
>せんでした。

if ( (!result) || ($a == "") ) break;
とするとどうでしょう?

[ ]
RE:02703 input直後の判定No.02705
TAKA さん 01/11/28 14:33
 
TAKA です。

>3.if ( !result || $a == "") break;
>
>の中の、1か2を指定した時は break できましたが、3ではできま
>せんでした。
>仕様でしょうか?

単なるプログラムミスです。

マクロヘルプの「式について→演算子」のページを見てもらったら
分かりますが、「!」と「||」は同じ優先順位です。
そのため、( ! ( result || $a == "" ) )と同じ意味になるようで
す。

否定 ( OKで入力 または 入力した文字列がない )

キャンセル かつ 入力した文字列がある

となり、絶対にありえない状態をif文で指定しています。

そのため、プログラム通り、いつまで経ってもbreakされません。

おそらく、キャンセルか文字列にヌルを指定した場合は、breakし
たいのだと思います。もしそうなら、
( ( !result ) || ( $a == "" ) )
と、するべきです。

[ ]
RE:02704 input直後の判定No.02706
haru さん 01/11/28 16:15
 
>if ( (!result) || ($a == "") ) break;
>とするとどうでしょう?

うまくいきました。ありがとうございます。

[ ]
RE:02705 input直後の判定No.02707
haru さん 01/11/28 16:23
 
TAKA さん、こんにちは。

>の「式について→演算子」のページを見てもらったら
>分かりますが、「!」と「||」は同じ優先順位です。
>そのため、( ! ( result || $a == "" ) )と同じ意味になるようで
>す。
すみません。知りませんでした。

>おそらく、キャンセルか文字列にヌルを指定した場合は、breakし
>たいのだと思います。もしそうなら、
>( ( !result ) || ( $a == "" ) )
>と、するべきです。
ありがとうございます。うまくいきました。

[ ]