그래서이 프로그램은 잘못된 사용자 입력을 원하는 방식으로 처리하지 않습니다. 사용자는 나중에 HotelRoom 개체 생성자에서 사용할 수 있도록 3 자리 숫자 만 입력 할 수 있습니다. 불행히도, 강사는 수업 시간에 문자열 개체를 사용할 수 없습니다 (그렇지 않으면 아무런 문제가 없을 것입니다). 또한 const char 포인터를 생성하기 위해 roomNumBuffer를 생성자에 전달합니다. 현재 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