2013-10-03 73 views
0

我想驗證用戶輸入了正確的字符。我假設已經輸入了一個字符。布爾循環和switch語句

問題:當我第一次輸入「f」時,返回carSize並且一切正常,代碼正常移動。如果我先輸入「d」,「沒有輸入正確的值......」,則顯示正確,但當再次輸入正確的值(如「f」)時,它會一直重複「You have沒有輸入正確的值「並等待另一個響應。在那之後,無論輸入什麼內容,它都會吐出後面的消息,就好像答案不正確一樣。這很簡單,我不能爲我的生活弄清楚我做錯了什麼。我是初學者,所以也許我在函數中錯誤地使用了「大小」?任何幫助將不勝感激。

這裏是我的代碼:

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(),所以當你第二次得到你的輸入時,它仍然是小寫,並且沒有捕獲循環中的任何條件。

+0

+1,這是一個很好的觀點,但第一個'f'是如何被大寫的? – cpp

+0

你的權利。謝謝您的幫助。我將使用dowhile循環,以便它總是首先調用toupper。萬分感謝。 – Ducksauce88

2

使用

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

從CIN閱讀忽略任何徘徊進入前。否則,這些輸入將被讀取而不是您輸入的字符。

+0

很好,看看我下面的點,我覺得其實有2個bug在這裏;) –

+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> "); 
}