switch 语句中的输入错误 如何循环回第一种情况?C++
wrong entry in switch statement how to loop back to the first case? c++
这是我的代码
int intNumber1, intNumber2, intResult, operation;
cout << "enter two integer values: ";
cin >> intNumber1 >> intNumber2;
cout << "enter (1) for addition, or (2) for subtraction" << endl;
cin >> operation;
switch (operation)
{
case '1':
intResult = intNumber1 + intNumber2;
cout << intResult << endl ;
break;
case '2':
intResult = intNumber1 - intNumber2;
cout << intResult << endl;
break;
default:
cout << "wrong entry please enter a valid choice - 1 for addition, or 2 for subtraction. " << endl;
cin >> operation;
break;
}
return 0;
所以我只允许使用 if/switch 语句,而不能使用任何类型的循环。有没有办法让程序重新启动并让用户选择操作?
所以基本上我所做的很简单。我创建了一个函数来保存您的开关盒。基本上,这样做的作用是,当您的主函数运行时,它将运行 userChoice 函数,该函数显示提示并允许用户输入选项。如果用户输入 1 或 2 以外的任何内容,开关将变为默认值,显示错误消息,并再次运行函数 userChoice。这不会循环回第一种情况并询问用户他们想要的运算符,而是再次调用函数 userChoice,这反过来又类似于重新启动程序或在没有循环的情况下循环它并再次提示用户输入。
包括
#include <iostream>
using namespace std;
void userChoice(); //Function prototype
int main() {
userChoice(); //Function for menu prompts and user entry
return 0;
}
//Function I created that holds your whole program
void userChoice() {
int intNumber1, intNumber2, intResult, operation;
cout << "enter two integer values: ";
cin >> intNumber1 >> intNumber2;
cout << "enter (1) for addition, or (2) for subtraction" << endl;
cin >> operation;
switch (operation)
{
case 1:
intResult = intNumber1 + intNumber2;
cout << intResult << endl;
break;
case 2:
intResult = intNumber1 - intNumber2;
cout << intResult << endl;
break;
default:
cout << "wrong entry. " <<
endl << "Restarting program.";
userChoice(); //Calls/restarts the function
break;
}
}
您可以使用do{}while()
来检查条件 - 如果您不允许使用它,您可以使用label
并在默认值中使用goto
,但要明智地使用它。另一个创意是在函数内部进行切换。调用该函数,开关将触发 - 然后如果输入错误,请再次调用该函数 - void 函数应该适合您在上面给出的代码中尝试执行的操作。我希望这个答案有所帮助!
相关文章:
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 有一个打印语句的函数是一种糟糕的编程实践吗
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 有没有一种方法可以在编译时获得作用域类名
- 对于C++中使用智能指针的指针算术限制,有没有一种变通方法
- 一种在C++中读取TXT配置文件的简单方法
- 有没有一种方法可以测量c++程序的运行时内存使用情况
- 有没有一种方法可以使用placement new将堆叠对象分配给分配的内存
- 在调用接收数组的方法时,模板化数组大小是不是一种糟糕的做法
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 有没有一种代码密度较低的方法来使用非默认构造函数初始化数组?
- 将错误返回给调用方而不是立即在 C++ 中抛出错误是否是一种好的做法
- 在 c++ 中,有一种方法可以创建一个包含地图作为值的树状地图?
- 有没有一种优雅而快速的方法来测试整数中的 1 位是否位于连续区域
- 在运行时检查继承是否只有一种类型和 void*
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 找到一种有效的方法,在 2 个巨大的缓冲区上执行 MAX,每字节字节
- 寻找一种更好的方法来表示无符号字符数组
- 我正在寻找一种优雅的方式来从元组向量创建tuple_element向量