2017-10-23 7 views
0

저는 사용자가 'z'를 입력하면 "True"를 표시하고 사용자가 다른 것을 입력하면 "False"를 표시하는 간단한 프로그램을 만듭니다. 이러한 사용자 입력 'ZZ'출력이 잘못 있어야하는 'ZS'등 사용자가 char 변수를 가진 문자 이상을 입력 할 때 버그가 발생했습니다.

True 
Input : True 

사용자 입력 등의 경우 등의 사용자 입력 문자 이상이, 출력

때 그러나, 문제는 문자열로 변경 변수 유형하지 않고이 문제를 방지 할 수있는 방법이 있는지
True 
Input : Wrong 

여기 궁금 내 코드

#include <iostream> 

using namespace std; 

int main() 
{ 
    char input; 

    cout << "Check input" << endl; 

    while(true){ 
     cout << "Input : "; 
     cin >> input; 
     if(input=='z'){ 
      cout << "True" << endl; 
     } else { 
      cout << "Wrong" << endl; 
     } 
    } 

    return 0; 
} 

입니까?

나는 당신은 하나의 문자를 읽어 것을 할 수없는 윈도우 10 64

+0

무엇'표준 : 하나의'char' 대신 string' 읽기에 대한? – user0042

+0

@ user0042 나는 그와 성공을 시도했지만, 내 목표는 단일 문자를 입력하고 확인하기 때문에 가능하면 char를 사용하고 싶다. –

+0

입력 한 결과가 예제에서 산출 한 결과와 일치하지 않습니다. –

답변

2

에 GNU GCC 컴파일러와 CodeBlocks 16.04 (는 MinGW)를 사용합니다. 요점은 사용자가 예를 들어 zz 그는 실제로 을 입력했습니다.은이 두 문자를 입력하며,이 문자는 cin에서 읽을 때 사용하는 문자입니다.

제안 된대로 std::string을 읽고 문자열의 첫 번째 문자 만 확인하십시오. 그것은 당신이하는 일과 마찬가지로 간단합니다. 당신은 단지 첫 번째 문자를 확인하고 유일한 문자가 문자열의 나머지 부분을 제거하는 버퍼를 플래시보다 입력되어 있는지 확인 할 수 확실히

#include <iostream> 
#include <string> 

using namespace std;  

int main() 
{ 
    string input; 

    cout << "Check input" << endl; 

    while (true) { 
    cout << "Input : "; 
    cin >> input; 
    if (input.length() > 0 && input[0] == 'z') { 
     cout << "True" << endl; 
    } 
    else { 
     cout << "Wrong" << endl; 
    } 
    } 

    return 0; 
} 
+0

"zz"또는 "zs"와 같은 시나리오에서는 여전히 input.length()> 0에서 input.length() == 1로 변경하려고합니다. – Nandee

1

그것 :

그래서 당신은 아마이 원하는 .

코드 :

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    char input; 

    cout << "Check input" << endl; 

    while (true) { 

     cout << "Input : "; 
     cin >> input; 
     //Check if the input is z and there is only 1 character inputted 
     if (cin.rdbuf()->in_avail() == 1 && input == 'z') { 
      cout << "True" << endl; 
     } 
     else { 
      cout << "Wrong" << endl; 
     } 
     //Flush the buffer 
     cin.clear(); 
     cin.ignore(INT_MAX, '\n'); 
    } 

    return 0; 
}