我正在尝试验证用户是否输入了正确的字符。我假设已经输入了一个字符。
问题:当我第一次输入说“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;
}
答案 0 :(得分:3)
你的问题是你在循环之外调用toupper(),所以第二次输入时,它仍然是小写的,并且没有捕获循环中的任何条件。
答案 1 :(得分:2)
使用
cin.ignore(INT_MAX, '\n');
从cin读取之前忽略任何流浪的ENTER。否则,将读取这些输入而不是您输入的字符。
答案 2 :(得分: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> ");
}