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;
             }  
4

3 に答える 3

3

あなたの問題は、ループの外側で toupper() を呼び出していることです。そのため、2 回目に入力を取得すると、それはまだ小文字であり、ループ内の条件をまったくキャッチしません。

于 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 に答える