「||」の条件式について – プログラミング – Home

「||」の条件式について
 
通知
すべてクリア

[解決済] 「||」の条件式について


ino
 ino
(@ino)
ゲスト
結合: 24年前
投稿: 5
Topic starter  

こんにちは。

大変基本的な質問になってしまうのですが、
「A~Mのどれでもなかったら」という条件を書きたいのですが、
if(Data!='A'||'B'||'C'||'D'||'E'||'F'||'G'||'H'||'J'||'K'||'L'||'M')
だと、もし「A」がきた場合にこの条件に入ってしまいます。
使い方を調べたのですが、どう間違っているのかよく分かりません。

どなたかご教示くださいませ。


引用未解決
トピックタグ
Angel
 Angel
(@Angel)
ゲスト
結合: 23年前
投稿: 2
 

初登場、第1位です。 <- 初登場のみホント

基本的に || ではなく && ですし、
if(Data!='A'&&Data!='B'&&Data!='C'&&....
と書かなければなりません。

面倒ならASCIIコードの特性を活かして
if(Data<'A'||Data>'M')
と表現できます。


返信引用
ワルツ
 ワルツ
(@ワルツ)
ゲスト
結合: 23年前
投稿: 21
 

if( 'A'< Data || Data > 'M' )
とかでいいんじゃないでしょうか?

演算子の優先順位をはっきりさせるためにも括弧でくくればいいでしょう。


返信引用
YuO
 YuO
(@YuO)
ゲスト
結合: 24年前
投稿: 252
 

if(Data!='A'||'B'||'C'||'D'||'E'||'F'||'G'||'H'||'J'||'K'||'L'||'M')
は,
int flag = 0;

if (Data != 'A') {
flag = 1;
} else if ('B') {
flag = 1;
} /* 以下省略 */
if (flag) {
...
}
という意味になります。
ここで,'B'は恐らく真ですから,常にif文が実行されます。

if (Dataが'A', 'B', …, 'M'でなければ)
は,
if (Dataが'A'でなく, かつDataが'B'でなく, …, かつDataが'M'でなければ)
となります。
これを表すと,Angelさんが書いた最初のif文になります。

if (!('A' <= Data && Data <= 'M'))
とこれの展開系は,常に正しく判断できることがC/C++で保証されて「いません」。
if (!(strchr(ABCDEFGHJIKLM, Data) != 0))
なら常に正しく判断されますが。もっとも,Windows上のコンパイラが
ISO 646非互換なコード系を使うことは皆無でしょうが。


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

こんな手もありますね。

int data;
...
if (strchr(ABCDEFGHIJKLM, data) == NULL) {
...
}

UNICODE対応にするなら、こうかな。
_TINT data;
...
if (_tcschr(_T(ABCDEFGHIJKLM), data) == NULL) {
...
}


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

かぶってしまいました。 ^^;


返信引用
ino
 ino
(@ino)
ゲスト
結合: 24年前
投稿: 5
Topic starter  

皆様、たくさんのアドバイスありがとうございました。
こんなに色々な暖かいアドバイスをいただけるなんてとても嬉しいです。

基本的に条件の書き方が間違っていたのですね。
まだまだ勉強不足です。

皆様のアドバイスを読み、Angel様の書いて下さったコードを
使わせていただき、実現に至りました。

コードの意味、使い方などこれから勉強していきたいと思います。

本当にありがとうございました。
また、レスが遅くなってしまい申し訳ありませんでした。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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