2010-02-17 2 views
3

저는 초보자에서 C++로 사용자 선택을 받아들이고 그것에 따라 행동하는 프로그램을 작성합니다 ... 내 유일한 문제는 사용자가 대문자 선택을 입력 할 때입니다 ... 프로그램이 잘못된 선택으로 처리합니다 ... 'e'가 숫자 입력을위한 선택 인 경우 사용자가 'E'를 입력하면 프로그램은 "숫자 입력"메시지를 표시하지 않습니다. 어떻게 해결할 수 있습니까? 최선을 다했으나 제대로 작동하지 않습니다. 아, 어떻게 스위치 케이스에 대문자를 추가 할 수 있습니까? 이것은 사용자의 선택을 취하고 이에 따라 행동하는 코드의 일부입니다.대문자와 소문자를 허용하려면 어떤 코드를 작성해야합니까?

#include <iostream> 
#include <cstring> 
using namespace std; 

int main(){ 

char choice ; 

for(;;){ 
    do{ 
     cout << endl ; 
     cout << "(e)nter." << endl ; 
     cout << "(d)isplay." << endl; 
     cout << "(u)pdate." << endl ; 
     cout << "(r)eset. " << endl; 
     cout << "(q)uit." << endl; 
     cout << endl; 
     cout << "Choose one : " ; 
     cin >> choice ; 

     if(!strchr("edurq",choice) && (choice>=97&&choice<=122)){ 
     cout << "Enter e,d,u or q " << endl;} 

     else if(!strchr("EDURQ",choice) && (choice<97&&choice>122)){ 
     cout << "Enter E,D,U or Q " << endl;} 

    }while(!strchr("edurqEDURQ",choice)); 

switch (choice) { 
    case 'e' : enter(); break ; 
    case 'd' : display(); break ; 
    case 'u': update() ; break ; 
    case 'r' : reset() ;break; 
    case 'q' : return 0; 
    } 

    } 
} 
+0

'하면 strchr ("EDURQ"선택) && (선택 <97&&choice> 122)'해킹 : 모두'<97' and '> 122'은, 그것은'strchr' 전화와 중복되지 않습니다 아무것도 할 수 있습니다! 어쨌든 ? –

답변

5

일치하는 switch 문에서 대소 문자를 구분하지 않으면 다음 문장으로 넘어갑니다. 소문자로 선택할 때마다 대문자를 쓰면 넘어 질 것입니다.

switch (choice) { 
    case 'E' : 
    case 'e' : enter(); break ; 
    case 'D' : 
    case 'd' : display(); break ; 
    case 'U' : 
    case 'u': update() ; break ; 
    case 'R' : 
    case 'r' : reset() ;break; 
    case 'Q' : 
    case 'q' : return 0; 
    } 

또 다른 옵션은 사용자 입력에 문자열 함수를 적용하여 소문자로 변경하는 것입니다.이 경우 기존의 switch 문이 작동합니다.

+4

모든 것을 두 번 입력해야하기 때문에 바보입니다. 왜 tolower를 사용하지 않는가? –

+1

그는 그것을 지적했다. – rafael

0

사례 진술에서 폴드 스루를 사용하기에 완벽한시기입니다.

switch (choice) 
{ 
    case 'E': 
    case 'e': 
     enter(); 
     break; 
    // etc. 
} 
8

입력 기능을 소문자로 변환하려면 tolower 함수를 사용하고 소문자 옵션에 대해서만 신경 써야합니다.

0

대문자 및 소문자는 개의 다른 문자 코드를 사용합니다. 따라서 스위치에서 소문자 만 사용하는 경우 한 가지 유형의 사례 만 테스트하게됩니다.

다른 예시처럼 스위치 문 테스트를 개선하거나 choice 문자를 소문자로 변환해야합니다. 이렇게하면 스위치 테스트에 필요한 예상 사례를 제공 할 수 있습니다.

-2

switch (choice | 0x20) { 
    ... 
+1

오, 제발 ... 대신 적절한 기능을 사용하지 마십시오 :(? –

+0

"해킹"해요 :-)) – wqw

관련 문제