2009-03-15 20 views
1
#include<iostream> 
using namespace std; 

int main() 
{ 

    char again; 
    do 
    { 
     cout<<"you are in the while loop"; 
     cout<<"do you want to continue looping?"; 
     cin>>again; 
    } while (again != 'n' || again != 'N'); 

    system("pause"); 
    return 0; 
} 

「while」のテスト条件に何か問題があることは知っています。しかし、私はそれを理解することはできません。&&と||を使用した場合の違いは何ですか? do ... whileループで?

ユーザの入力が 'n'でも 'N'でもない場合、ループは「あなたはwhileループ中です」というコードを印刷し続ける必要があります。 'n'または 'N'を押すと、プログラムは終了します。

私のコードでは、プログラムはどの文字を入力してもコードをループし続けます。 しかし、私が '||' '& &'に設定すると、プログラムは必要に応じて実行できます。 誰でも何が起こっているか教えていただけますか?

答えて

9

これは一般的なブール論理の質問です。 ||は「or」を意味し、「これの片側が真である限り、その表現は真」となります。したがって、大文字の'N'c != 'n' || c != 'N'に渡すと、プログラムは「'N''n'と等しくないため、式の片側が真となり、式全体が真となり、残りの式をチェックする必要はありません。 " 'n'の小文字を押した場合でも、プログラムは「'n''n'と等しいですが、'N'と等しくないため、式の一方が真であるため、式全体が真です」と表示されます。これはあなたのwhileループで起こっていることです。

一方、&&は、「and」は、「expressionの両側が真でなければならない」ことを意味します。 'N'c != 'n' && c != 'N'に渡すと、プログラムは "'N''n'と等しくないが、'N'と等しくなるので、式の片側だけが真であるため、式は偽です。

あなたは||が使用する入力した文字が特定の値に等しいたかどうかを確認するためにテストした場合ので、これは混乱を取得(例えば、「'a'または'b'または'c'が入力された場合、私は知りたいです」)。あるいは別の言い方をするには、あなたが特定の発現のための||を使用して、あなたは、その表現の反対をしたいとき

基本的には、例えば、私が欲しい'a''b'または'c'のどれを&&(に変更する必要があります、値は'a'することはできませんとそれが「それは'c'することはできません'b'することはできません)を使用すると、特定の発現のための&&を使用して、あなたがその式の逆をしたい場合。同様に、あなたは||を使用する必要がありますこれはDe Morganの法則の1つです。あなたが読んでおくことをお勧めします。あなた自身でそれぞれを再発見することができます。

+0

ありがとう。役に立つ情報 –

10

はい:||は「or」であり、& &は「and」である。それはおそらく両方「N」と「N」を同時にすることはできませんので

すべての文字が「ではない 『N』」か「ではない 『N』」のいずれかです。

条件を書いている別の(おそらく単純に読むため)の方法は、次のようになります。

!(again == 'n' || again == 'N') 

「の反対の(が再び 『N』または 『N』のいずれかである)」を意味しています。

1

& &は論理ANDです。 ||論理ORです。

は(また、&はビット単位でAND、および|。ビット単位であるOR)あなたがいる間しようとする場合があります

0

(!(再び== 'N' ||再び== 'N'))

9

"De Morgan's laws"というブール代数です。あなたのケースでは

Not (P And Q) = (Not P) Or (Not Q) 
Not (P Or Q) = (Not P) And (Not Q) 

、ユーザーが'n'または'N'を入力していない、それはこのロジックに変換することができたいと思います。ド・モルガンの法則を適用する場合、それはより多くの情報については

(again != 'n' && again != 'N') 

なります

!(again == 'n' || again == 'N') 

オリジナルポスターは今幸せですが、あなたはPropositional logic

+0

ありがとうございます。 –

5

を読みたいかもしれませんが、私は見ませんでしたこれは他の回答にあります:

(true && true) == true 
(true && false) == false 
(false && true) == false 
(false && false) == false 

(true || true) == true 
(true || false) == true 
(false || true) == true 
(false || false) == false 

!true == false 
!false == true 

これはすべてです!

+0

あなたは本当に忘れました!= false;](やはり慎重でなければなりません; 'false && true == false'はfalseに評価されます...何が優​​先されているか) –

+0

OK、括弧を付けました!私はこれらがプログラムで表現として現れることを意味しませんでした。 :) –

+0

@Earwicker - ええと、&&と||の違いを見ることができない場合:...] –

2

私はよくあなたの問題を理解し、ここでの説明は次のとおりです。

DO-whileループが終了条件ループです。これは、ループの本体が常に最初に実行されることを意味します。次に、テスト条件が評価されます。テスト条件がTRUEの場合、プログラムはループの本体を再度実行します。テスト条件がFALSEの場合、ループは終了し、プログラム実行はwhileの後に続く文で継続されます。

あなたのコードでは、 'n'または 'N'を押すと、テスト条件は常に真となり、偽の場合は となります。テスト条件(true || false = true)を満たすので、プログラムはループの本体を再度実行します。 & &を使用した場合、これは(true & & false = false)、テスト条件はもはや統計されないので、プログラムはループの本体を再度実行しません。

私はそれが役に立つと思います.....プログラムを楽しんでください! アメララディ

関連する問題