2017-09-21 2 views
1

私のプログラムはループし続け、 "return 0;"を得ることはありません。コンパイラが悪いのかコードですか?私のプログラムはループを維持し、 "return 0;"を得ることはありません。コンパイラが悪いのかコードですか?

#include<iostream> 
using namespace std; 

int main() { 
    string nameInput = ""; 
    string Input = "Yes"; 
    cout << "Welcome to the purple casino!" << endl << "What's your name?" << endl; 
    while(Input =="Yes" || "yes"){ 
     getline(cin, nameInput); 
     cout << nameInput << ", what a nice name!" << endl << "Do you want to change it?" << endl; 
     getline(cin, Input); 
     if(Input =="Yes" || "yes"){ 
      cout << "To what?" << endl; 
     } 
    } 
    cout << "Let's begin!"; 
    return 0; 
} 
+9

経験則:コンパイラではなく、あなたです! –

+0

うんざりしたくぼみを除いて、これはよく聞かれます。 – Bathsheba

+2

少なくとも99.99%のケースでは、https://stackoverflow.com/questions/42088015/lambda-capture-and-parameter-with-same-name-who-shadows-the-other-clang-vs-gを参照してください。反例のために。 –

答えて

5

表現Input == "Yes" || "yes"は常にtrueある

(Input == "Yes") || "yes"

として、原因演算子の優先順位に、評価されます。これは、const char[4]のリテラル"yes"が0以外のポインタ値を使用してconst char*タイプへののタイプで崩壊するためです。

あなたはあなたのコード内の愚かな間違いがありInput == "Yes" || Input == "yes"

5

私のプログラムがループし続けるとのをするために取得することはありません「0を返します;」。コンパイラが悪いのかコードですか?

(ほぼ)常にコード。

  • true場合: 『はい』または 『はい』とInputが等しいことは言ってつまるところ以来

    Input =="Yes" || "yes"は常に、本当にどんなInputの値、trueに評価されません。

  • falseもしそうであれば。

trueに文字列リテラルを評価し、論理のため、第二オペランドまたは常に、trueに評価するために全体の論理式を引き起こし、trueになります!

結果として、whileループの条件は常にtrueになり、結果として無限ループになります。これに

while(Input =="Yes" || "yes") 

while(Input =="Yes" || Input == "yes") 

PSを:

ので、これを変更することはまったく同じ条件なので、同様にif文の条件を変更してください。

2

あなたwhile文の条件が間違っている:

while (Input == "Yes" || "yes") 

"yes"としてオペランドは、常に全体の状態がtrueする原因trueに評価されます。代わりにこれを試してみてください:

while (Input == "Yes" || Input == "yes") 
0

を必要としています。下の編集したコードを見てください -

#include<iostream> 
using namespace std; 

int main(){ 
string nameInput = ""; 
string Input = "Yes"; 
cout << "Welcome to the purple casino!" << endl << "What's your name?" << 
endl; 
while(Input =="Yes" || Input == "yes"){ // Error was here 
getline(cin, nameInput); 
cout << nameInput << ", what a nice name!" << endl << "Do you want to    
change it?" << endl; 
getline(cin, Input); 
if(Input =="Yes" || "yes"){ 
cout << "To what?" << endl; 
} 
} 
<< "Let's begin!"; 
return 0; 
} 

while(Input =="Yes" || "yes"){while(Input =="Yes" || Input == "yes"){

を変更してください、私は問題が解決されると思います。

0

戻り試す前にこんにちは:
cout << "Let's begin!";
とにあなたの状態間および場合における変更:あなたはあなたのプログラムが返すことはありません、そこからループを持っている場合は、より一般的な方法で
(Input =="Yes" || Input=="yes")

0

、それ渡された条件が常にtrueと評価されることを意味します。確かに、あなたのケースで 、すでに他の人の回答、

while (Input == "Yes" || "yes") 

が常にあるため第二部のtrueと評価条件として。 何が本当にしたいことは、入力が「はい」または入力であるかどうかを確認することですが、「はい」、C++で書かれるべきである:

while (Input == "Yes" || Input == "yes"). 

・ホープ、このより一般的な答えは役立ちます。

関連する問題