【问题标题】:boolean loop & switch statement布尔循环和 switch 语句
【发布时间】:2013-10-09 15:27:58
【问题描述】:

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

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

【问题讨论】:

    标签: c++ while-loop boolean switch-statement logical-operators


    【解决方案1】:

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

    【讨论】:

    • +1,这很好,但是第一个 f 是如何大写的?
    • 您的权利。谢谢您的帮助。我将使用 dowhile 循环,这样它 toupper 将始终被首先调用。非常感谢。
    【解决方案2】:

    使用

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

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

    【讨论】:

    • 很好,请看下面我的观点,我认为这里实际上有 2 个错误 ;)
    • 没有。它们是空格。
    【解决方案3】:
    #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-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-05
      • 2016-05-17
      • 1970-01-01
      相关资源
      最近更新 更多