布尔循环和开关语句
boolean loop & switch statement
我正在尝试验证用户是否输入了正确的字符。我假设已输入字符。
问题:当我第一次输入"f"时,carSize 被返回,一切正常,代码正确移动。如果我先输入"d","您没有输入正确的值......"正确显示,但是当我再次输入正确的值(例如"f")时,它只是不断重复"您没有输入正确的值"并等待另一个响应。在那之后,无论输入什么,它都会吐出该回复消息,就好像答案不正确一样。这相当简单,我一辈子都搞不清我做错了什么。我是初学者,所以也许我在函数中使用了错误的"size"?任何帮助将不胜感激。
这是我的代码:
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;
}
你的问题是你在循环之外调用 toupper(),所以第二次你得到你的输入时,它仍然是小写的,不会捕获循环中的任何条件。
使用
cin.ignore(INT_MAX, 'n');
在从 CIN 读取之前忽略任何徘徊的 ENTER。否则,将读取这些输入而不是您输入的字符。
#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> ");
}
相关文章:
- C 和 C++ 中开关语句的案例标签的常量值,但显示不同的行为
- 为什么布尔开关语句有编译器警告?
- 如何使用"equal to"以外的评估编写开关语句
- 有没有办法在C++将字符串与开关语句一起使用?
- 带有开关语句的 do-while 循环 -- 无穷循环错误
- 如何在不同的开关大小写语句上使用对象的类成员函数?
- C++实用程序,用于将长开关语句转换为封装开关案例阶梯的简洁函数调用
- 如何循环开关语句直到找到所需的数字?
- 使用开关大小写语句抽取随机扑克牌等级和花色以显示用户
- 带有关闭/打开布尔值的开关语句
- 清理开关语句
- 我的开关语句在C++中不起作用
- 枚举和开关语句C++
- 如何在开关语句中使用 cin "as a parameter"
- 重构开关或 if/else 语句?
- "constexpr if"比开关语句好吗?
- C++ 默认值在开关语句中不起作用
- 初学者C :为什么此开关语句给我一个错误
- C 开关语句无法正常工作
- 为什么允许在开关语句中声明变量?但不是声明 初始化