0

사용자가 올바른 문자로 입력했는지 확인하려고합니다. char가 입력되었다고 가정합니다.부울 루프 및 스위치 문

문제점 : "f"라고 먼저 말하면 carSize가 반환되고 모든 것이 올바르게 작동하고 코드가 올바르게 움직입니다. "d"를 먼저 입력하면 "올바른 값을 입력하지 않았습니다 ..."가 올바르게 표시되지만 "f"와 같은 올바른 값을 다시 입력하면 "계속 올바른 값으로 입력되지 않음 "을 표시하고 다른 응답을 기다립니다. 그 시점 이후에 입력 된 내용이 무엇이든, 답변이 잘못되어있는 것과 같은 메시지가 튀어 나옵니다. 이것은 상당히 간단하고 나의 삶은 내가 잘못하고있는 것이 무엇인지 알아낼 수 없다. 나는 초보자이며, 아마도 함수에서 "크기"를 잘못 사용하고있을 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.

const string RENTAL_DAYS = "Enter number of days rented: "; 

cout << RENTAL_DAYS; 
     cin >> rentalDays; 
     rentalDays = correctNumberCheck(rentalDays, RENTAL_DAYS); 


    char rentalSizeCheck(char size, string question) { 

      bool notValid = true; 
      size = toupper(size); 

        while(notValid) { 

         switch (size) { 

          case 'C': 
           notValid = false; 
           break; 
          case 'M': 
           notValid = false; 
           break; 
          case 'F': 
           notValid = false; 
           break; 
          case 'S': 
           notValid = false; 
           break; 
          default: 
           cout << "You have not entered in a correct value " 
             << ", please try again" << endl; 
           cout << question; 
           cin >> size; 
           }// Close switch 
        } // Close while loop 
      return carSize; 
      } 

답변

3

루프 외부에서 toupper()를 호출하고 있으므로 두 번째로 입력을 받으면 여전히 소문자이며 루프의 조건을 catch하지 않는 것이 문제입니다.

+0

+1, 그건 좋은 지적이지만 첫 번째'f'가 대문자로 된 이유는 무엇입니까? – cpp

+0

귀하의 권리. 도와 주셔서 감사합니다. 대신에 dowhile 루프를 사용하여 toupper가 항상 먼저 호출되도록합니다. 엄청 고마워. – Ducksauce88

2

사용

cin.ignore(INT_MAX, '\n'); 

어떤 방황가 입력 무시 CIN에서 읽기 전에 :

여기 내 코드입니다. 그렇지 않으면 입력 한 문자 대신에 이러한 입력 내용이 읽혀집니다.

+0

좋은 점은 아래의 내용을 참조하십시오. 실제로 여기에 2 개의 버그가있는 것 같습니다.) –

+0

아니요. 공백입니다. –

0
#include <cctype> 
#include <iostream> 
#include <string> 

using namespace std; 

char rentalSizeCheck(char size, string question) { 
    bool notValid = true; 

    while (notValid) { 
    size = toupper(size); 
    switch (size) { 
    case 'C': 
    case 'M': 
    case 'F': 
    case 'S': 
     notValid = false; break; 
    default: 
     cout << "You have not entered in a correct value " 
      << ", please try again" << endl; 
     cout << question; 
     cin >> size; 
    } 
    } 
    return size; 
} 

int main() { 
    std::cout << rentalSizeCheck(' ', "CMFS> "); 
}