そのため、私が取り組んでいるこのプログラムは、間違ったユーザー入力を希望どおりに処理していません。ユーザーは、後で HotelRoom オブジェクト コンストラクターで使用するために、3 桁の数字のみを入力できる必要があります。残念ながら、私のインストラクターは、クラスでの文字列オブジェクトの使用を許可していません (そうでなければ、問題はないと思います)。また、コンストラクターに roomNumBuffer を渡して const char ポインターを作成しています。現在、iostream、iomanip、string.h、および limits プリプロセッサ ディレクティブを使用しています。この問題は、roomNumBuffer に多すぎる文字を入力しようとした後に発生します。次のスクリーンショットは、何が起こるかを示しています。
この問題に関連するコードは次のとおりです。
cout << endl << "Please enter the 3-digit room number: ";
do { //loop to check user input
badInput = false;
cin.width(4);
cin >> roomNumBuffer;
for(int x = 0; x < 3; x++) {
if(!isdigit(roomNumBuffer[x])) { //check all chars entered are digits
badInput = true;
}
}
if(badInput) {
cout << endl << "You did not enter a valid room number. Please try again: ";
}
cin.get(); //Trying to dum- any extra chars the user might enter
} while(badInput);
for(;;) { //Infinite loop broken when correct input obtained
cin.get(); //Same as above
cout << "Please enter the room capacity: ";
if(cin >> roomCap) {
break;
} else {
cout << "Please enter a valid integer" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
for(;;) { //Infinite loop broken when correct input obtained
cout << "Please enter the nightly room rate: ";
if(cin >> roomRt) {
break;
} else {
cout << "Please enter a valid rate" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
}
どんなアイデアでも大歓迎です。前もって感謝します。