2017-11-25 16 views
-10

みんな! 私は 'do-while'ループを示すためにC++でプログラムを書いていました。このプログラムは、「さようなら」でない限り、ユーザーが入力したものだけをエコーし​​ます。 したがって、ユーザーが「hey」と入力すると、プログラムは「hey」をエコーし​​、ユーザーが「さようなら」と入力すると、プログラムは停止します。これはコードです:C++ do-whileループ

#include "stdafx.h" 
#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
string wordString; 

do 
{ 
    cout << "\nEnter a word: "; 
    getline(cin, wordString); 
    cout << "\nYou entered: " << wordString<<"\n"; 
} while ((wordString!="goodbye")||(wordString!="Goodbye")); 

return 0; 
} 

私がやりたいことは、ユーザが言葉「さようなら」や入力したときにプログラムを停止させることだった「さようなら」。それで私は||を追加しましたそれが機能していないことを確認するために、 ループステートメントは単に実行し続けるだけです。 しかし、私が置くとき& &の代わりに||適切に機能し、「さようなら」や「さようなら」が入力されるたびにプログラムが停止しました。

私の質問はこれです:なぜですか& &と||しない?

+3

紙にwordString' 'に異なる値を割り当て、何を参照してください。

回避策は、あなたが一つの値だけをチェックし、すべての資本または小文字のいずれかに入力されたテキストに変換することができますです各条件はに評価されます。これは本当にSOに関する完全な質問を保証しますか? – StoryTeller

+0

[De Morganの法律](https://en.wikipedia.org/wiki/De_Morgan%27s_laws)を適用すると、その理由がわかります。 – Jodocus

+0

ロジック; whileは常にORと1になります。 ANDを使用すると、いずれかの条件が0のときは0になります。 – JDQ

答えて

0

使用中||それがOR演算子であるので、プロンプラムを停止しないでください。これは、ステートメントのいずれかが真であるときに真となることを意味するので、誰でも真であればAND(& &)演算子で実行されます。文を実行するためには真でなければなりません。

0

あなたが唯一wordstring等しくないRO「さようなら」ではなく「GOODBYE」に等しい場合、ループを切断したいためにlogical and &&ないor ||を使用する必要があります。

while(wordString != "goodbye") && (wordString != "Goodbye"); 

それとも、OR ||をこの方法で使用することができます:wordStringは "さようなら" や "GOODBYE" のいずれかを含むとORている場合あなたが見ることができるように

while(wordString == "goodbye" || wordString == "Goodbye"); 

、その後破ります。論理ORは、いずれかのオペランドが非ゼロであれば真を返し、両方がゼロであれば偽を返します。論理AND "& &"は、2つのオペランドが0以外の場合はtrueを返し、そうでない場合は0を返します。

ユーザーが「さようなら」を入力した場合に表示される内容。キャピタルの最初のキャラクター、あるいは小文字と大文字の混じったものはあなたがプログラムするでしょう。それは壊れないからです。

std::string wordString = "GoodBye"; 
for(int i(0); i < wordString.length(); i++) 
    wordString[i] = to_upper(wordString[i]); 

// wordString = "GOODBYE" 

// .... 
while(wordString != "GOODBYE");