2017-10-22 3 views
-2

この場合、ブレークポイント「q」または「Q」が入力されるまで、P1ベクトルに整数を入力し続けたいと思います。ブレーク条件が満たされたら、実行されたプログラムは無限ループに狂ってしまいます。私が見ることができるすべてのアイデアは、 'q'または 'Q'が文字であるため、whileループが実行されて無限ループするとき整数ベクトルがこれを入力として受け取りますか?whileループが終了しないC++

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

using namespace std; 

int main() 
{ 
    //Declaring Polynomial 1 and 2 
    vector<int> P1; 
    vector<int> P2; 

    int x = 0; 
    int y = 0; 

    while (x != 'q'||x != 'Q') { 
     cout << "Please enter in the first polynomial one value at a time (Press Q when done)..."; 
     cin >> x; 
     P1.push_back(x); 
    } 

    //Also tested with a do while same problem 
    /*do 
    { 
    cout << "Please enter in the first polynomial one value at a time (Press Q when done)..."; 
    cin >> x; 

    P1.push_back(x); 

    } while (x != 'q');*/ 



    //Ignore this is for next part of program 
    vector<int> Res((P1.size() + P2.size()) + 1); 

    cout << P1.size() << "," << P2.size() << "," << Res.size(); 

    return 0; 
} 
+7

条件 'x!=' q '|| x!=' Q''は常に真です。理由は分かりますか? –

+0

よくxはqではない0から始まるので、TRUEで始まるので、私のロジックはfalseまたはfalse = falseなので、xが 'q'または 'Q'になるまで実行し続けます。これはFALSEになり、確かにループ? – Tom

+0

整数変数と文字リテラルを比較するのはなぜ理にかなっていると思いますか?次のコードを試してください: 'int x = 'Q'; cout << x; 'それは何を印刷しますか?これはあなたが欲しい、または期待していることですか? –

答えて

2

(X = 'Q' || X = 'Q'!!)< ----ここでは、それは常に明らかに真のエラーです:ときのx == Q - >真、理由は( x!= 'Q')== true、それ以外は逆です。変更|| 〜& &。

+0

変更|| &&はまだ私に無限ループを与えます – Tom

+0

もう一度クリーン&コンパイルを試みますか? –

+0

(x!= 'q' && x!= 'Q')はプログラムを無限ループに送ります。 – Tom

2

条件:

(x != 'q' || x != 'Q') 

で常にtrue無限ループになります。なぜそれがより詳細であるか:

x整数変数は0に初期化されます。次に、xがの整数値を表す'q'と異なるかどうかをチェックします。その値と等しくないので、x != 'q'の式はtrueです。次に、xが、85の整数値を表す'Q'文字と等しくないかどうかをチェックします。その値と等しくないので、x != 'Q'の式もtrueです。最終的には(true || true)の条件になります。これは常にtrueです。

整数値はブール値に暗黙的に変換されます。0falseを表し、その他の数値はtrueを表します。

char c = 'y'; 
while (std::cin && (c == 'y' || c == 'Y')) { 
    // do work 
    std::cout << "Do you want to repeat the input? y/n?"; 
    std::cin >> c; 
} 

あなたが"stdafx.h"ヘッダーを必要としない言われていること:代わりにこのような何かを試してみてください。

+1

ああ私はそれが本当のように始まるように理解しています.1つのステートメントに対してxが偽になると、もう1つのステートメントはまだ真であり、ORはそれでも全体的に真のものになります – Tom

+0

なぜ今は理解できません.... while(x!= ' q '&& x!=' Q ')は動作しませんか?無限ループ – Tom

+0

私はnを押すと終了していないようでありがとうございました – Tom

0

私はあなたがint x
セカンドを使用してはならないと思います。まず、ロンはとにかく&&
に変更||を言っただけのように、ロンは、例を与え、それが動作します。

+0

フィードバックに感謝しながら、私はあなたが答えとしてではなくコメントとしてコメントを投稿すべきだと言わなければならない。それを行うには、コメントを投稿できるように担当者を募集してください。 – Ron

+1

あなたの助言に感謝します。あなたは正しいです、私は将来それを行います –

関連する問題