2012-10-28 2 views
3

내 코드에서 'Q'또는 'q'를 입력해도 프로그램이 계속 반복되는 문제가 있습니다. 여기 뭐가 잘못 됐니? 여기 코드는 다음과 같습니다메뉴에서 C++ 루프

{ 
    char selection; 
    do { 
     cout << "Add a county election file   A" << endl; 
     cout << "Show election totals on screen  P" << endl; 
     cout << "Search for county results   S" << endl; 
     cout << "Exit the program     Q" << endl; 
     cout << "Please enter your choice: "; 
     cin >> selection; 
    } while ((selection != 'Q' || selection != 'q')); 
    return 0; 
} 
+0

'q'를 입력하면 'selection! ='Q''가 참입니다. 'Q'라고 타이핑하면 다른 하나는 사실입니다 ... 그래서 그 루프를 떠날 방법이 없습니다. – Mat

+0

처음으로 이야기하고 있습니까? –

+3

클래식 오류'selection! = 'Q'|| selection! = 'q ''는'selection! ='Q '&& selection! ='q''이어야합니다. 그러나 – john

답변

11

당신은 테스트가 아닌 또는 (||) 연산자에 그리고 (&&) 연산자를 사용하고 싶습니다. 그렇지 않으면 selection != 'Q'selection != 'q' 중 하나가 항상 true가되고 루프가 종료되지 않습니다.

3

지적한대로 ||은 요구 사항을 충족하지 못합니다. && 연산자를 사용해야합니다.

q을 누르면이 상황이 발생합니다.

(selection != 'Q' || selection != 'q') 
|---------------| |--------------| 
    true     false 

Q을 누르면이 상황이 발생합니다.

(selection != 'Q' || selection != 'q') 
|---------------| |--------------| 
    false     true 

루프가 이와 같아야합니다.

while((selection != 'Q' && selection != 'q')); 
2

대신을 시도해보십시오

} while((selection != 'Q' && selection != 'q')); 
0

사용 toupper()을.

이렇게하면 while (toupper(selection) != 'Q' ) 대문자와 소문자를 모두 확인할 필요가 없습니다.

#include <iostream> 
#include <stdio.h> 
using namespace std; 

int main(void) 
{ 



    char selection; 
    do { 
     cout << "The Menu" << endl; 
     cout << "____________________________________" << endl; 
     cout << "Add a county election file   A" << endl; 
     cout << "Show election totals on screen  P" << endl; 
     cout << "Search for county results   S" << endl; 
     cout << "Exit the program     Q" << endl; 
     cout << "____________________________________" << endl; 
     cout << "Please enter your choice: "; 
     cin >> selection; 
    } while (toupper(selection) != 'Q' ); 



    cout<<" \nPress any key to continue\n"; 
    cin.ignore(); 
    cin.get(); 

    return 0; 
}