0

我正在尝试验证用户是否输入了正确的字符。我假设已经输入了一个字符。

问题:当我第一次输入说“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;
             }  
4

3 回答 3

3

您的问题是您在循环之外调用 toupper() ,因此第二次获得输入时,它仍然是小写并且不会捕获循环中的任何条件。

于 2013-10-03T04:16:58.857 回答
2

利用

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

在从 cin 读取以忽略任何徘徊的 ENTER 之前。否则将读取这些输入而不是您输入的字符。

于 2013-10-03T04:16:42.197 回答
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> ");
}
于 2013-10-03T04:33:15.863 回答