2017-10-22 7 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은 0이 아닌 q로 시작하므로 TRUE로 시작하므로 내 논리는 false 또는 false = false이므로 x가 'q'또는 'Q'가 될 때까지 계속 실행되어 FALSE가되고 틀림없이 루프? – Tom

+0

왜 정수형 변수를 문자 리터럴과 비교하는 것이 합리적이라고 생각합니까? 이 코드를 사용해보십시오 :'int x = 'Q'; cout << x;'무엇을 인쇄합니까? 이것은 당신이 원하거나 기대하는 것입니까? –

답변

2

(X = 'Q'|| X = 'Q'!!) < ---- 여기에, 항상 분명 사실 오류입니다 : 때 X == Q -> 사실 때문에 (x! = 'Q') == 참, 그 반대의 경우. 변경 || ~ & &.

+0

변경됨 || to && 여전히 무한 루프를 제공합니다 – Tom

+0

다시 정리하고 다시 컴파일 하시겠습니까? –

+0

(x! = 'q'&& x! = 'Q')는 프로그램을 무한 루프로 보낸다. – Tom

2

조건 :

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

항상 true 무한 루프의 결과. 그 이유는 다음과 같습니다.

x 정수 변수는 0으로 초기화됩니다. 그런 다음 x이 의 정수 값을 나타내는 'q'과 다른지 확인합니다. 그 값과 같지 않으므로 x != 'q'의 표현식은 true입니다. 그런 다음 x85의 정수 값을 나타내는 'Q' 문자와 같지 않은지 확인합니다. 이 값은 해당 값과 같지 않으므로 x != 'Q'의 식도 true입니다. 우리는 항상 true(true || true)의 조건으로 끝납니다.

Integral 값은 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

아 나는 진실로 시작하고 하나의 문장에 대해 x가 거짓이 될 때 다른 문장이 여전히 참이고 OR이 여전히 진실하게 만드는 것을 이해한다. – Tom

+0

나는 왜 이제 .... .... (x! = ' q '&& x! ='Q ')가 작동하지 않습니까? 끝없는 루프 – Tom

+0

고맙습니다. 이제는 n을 눌러도 종료되지 않는 것 같습니다 – Tom

0

먼저 내가 방금 론과 같은 두 번째 int x
어쨌든 &&
에 변화를 || 말했다 사용하지한다고 생각합니다, 론 예를 포기하고 그것을 작동합니다.

+0

의견에 감사 드리며 답변으로 의견이 아닌 의견을 게시해야합니다. 그렇게하기 위해서 의견을 게시 할 수있는 담당자를 만들어주십시오. – Ron

+1

귀하의 조언에 감사드립니다. 네가 맞다. 나는 미래에 그것을한다. –