因此,我正在處理的這個程序沒有按照我想要的方式處理不正確的用戶輸入。用戶應該只能輸入一個3位數字,以便稍後在HotelRoom對象構造函數中使用。不幸的是,我的教師不允許在他的班級中使用字符串對象(否則,我認爲我不會有任何問題)。另外,我將roomNumBuffer傳遞給構造函數來創建一個const char指針。我目前正在使用iostream,iomanip,string.h,並限制了預處理器指令。嘗試爲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');
}
}
任何想法,將不勝感激。提前致謝。
作爲第一個解析步驟,不使用'getline'是瘋狂的。 [這樣做。](http://stackoverflow.com/a/13445220/596781)。 –
@KerrekSB我同意,但我認爲使用cin.width()可能有助於我試圖完成的任務。當我嘗試** getline **時,我遇到了同樣的問題。如果使用它,我將如何處理這個問題? – Nyxm