获取用户输入时的错误处理 我是C++初学者,我有一个小问题:
“我的代码”向用户显示一个简单的菜单,提供三个选项:获取用户输入时的错误处理 我是C++初学者,我有一个小问题:,c++,C++,“我的代码”向用户显示一个简单的菜单,提供三个选项: cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: "; cout << "\n <r> Give new coefficients"; cout << "\n <c> Calculate equations solutions"; cout << "\n <t> Termin
cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: ";
cout << "\n <r> Give new coefficients";
cout << "\n <c> Calculate equations solutions";
cout << "\n <t> Terminate the program";
无法输入无效的输入,请重试
1或任何其他数字->输入的输入无效,请重试
rt->输入的输入无效,请重试
(此处第一个字符是正确的,但他输入了2个字符)
cf->输入的输入无效,请重试
只有在用户正确输入3个简单字符(r、c、t非敏感大小写)中的一个来做某事时,否则应打印无效输入的信息,然后再次出现主菜单
我试过这个,但不起作用:
char displayMainMenu()
{
char mainMenuChoice;
cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: ";
cout << "\n <r> Give new coefficients";
cout << "\n <c> Calculate equations solutions";
cout << "\n <t> Terminate the program";
cout<<"Enter choice : ";
cin>>mainMenuChoice;
return mainMenuChoice;
}
int main()
{
bool done = false;
while(!done)
{
char choice = displayMainMenu();
if( isalpha(choice) )
{
switch(tolower(choice))
{
case 'r':
DoSTH1();
break;
case 'c':
DoSTH2();
break;
case 't':
DoSTH3();
break;
default:
cout<<"Invalid choice!\n"<<endl;
}
}
}
return 0;
}
char displayMainMenu()
{
char mainMenuChoice;
不能改变这一行:
cout<<"Enter choice : " << std::endl;
// ^^^^^^^^^^^^^^^
更改此行:
cout<<"Enter choice : " << std::endl;
// ^^^^^^^^^^^^^^^
首先,省略if(isalpha(choice))
。它不是必需的,因为除了r
、c
或t
之外的任何输入都将属于默认值
实际上,这可能是问题的原因。如果输入的字符不是字母数字,则函数将在不显示错误消息的情况下结束
总的来说,我的建议是:不要想得太复杂。切换的美妙之处在于,你可以根据精确的匹配进行操作,而所有其他操作都会变成默认值。首先,省略if(isalpha(选项))
。这是不需要的,因为除了r
、c
或t
之外的任何输入都将属于默认值
实际上,这可能是问题的原因。如果输入的字符不是字母数字,则函数将在不显示错误消息的情况下结束
总的来说,我的建议是:不要想得太复杂。开关的美妙之处在于,你可以根据精确的匹配进行操作,其他所有开关都会被默认设置为“我试过了,但它不起作用”是什么意思?你得到了什么输出?你是说它没有编译吗?(它不会处于你显示的状态).你的意思是,程序比我们看到的要多,但它产生了意想不到的结果?我们没有足够的时间来调试它。值得一提的是,我没有看到任何错误(除了它显然不完整):
#包括
使用名称空间std;
char displayMain菜单(){
char mainMenuChoice;
cout什么是“我试过了,但它不起作用”的意思?你得到了什么输出?你是说它没有编译吗?(它不会在你显示它的状态下).你的意思是,程序比我们看到的要多,但它产生了意想不到的结果?我们没有足够的时间来调试它。值得一提的是,我没有看到任何错误(除了它显然不完整):
#包括
使用名称空间std;
char displayMain菜单(){
char mainMenuChoice;
cout要通过被接受为“c”的“cbbb”,您必须使用getline()读入一行。然后您可以检查是否只输入了一个字符,然后检查输入了哪个字符
如果您使用cin读取字符,它将只读取输入流中可用的第一个字符。要通过被接受为“c”的“cbbb”,您必须改为使用getline()读取一行。然后您可以检查是否只输入了一个字符,然后检查输入了哪个字符
如果使用cin读取字符,它将只读取输入流中可用的第一个字符
// if( isalpha(choice) )
#include <iostream>
using namespace std;
char displayMainMenu() {
char mainMenuChoice;
cout << "\nQuadratic equation: a*X^2 + b*X + c = 0 main menu: ";
cout << "\n <r> Give new coefficients";
cout << "\n <c> Calculate equations solutions";
cout << "\n <t> Terminate the program";
cout<<"\nEnter choice : ";
cin>>mainMenuChoice;
return mainMenuChoice;
}
int main() {
bool done = false;
while(!done) {
char choice = displayMainMenu();
if( isalpha(choice) ) {
switch(tolower(choice))
{
case 'r':
cout << "got 'r'\n";
break;
case 'c':
cout << "got 'c'\n";
break;
case 't':
cout << "got 't'\n";
done = true;
break;
default:
cout<<"Invalid choice!\n"<<endl;
}
}
}
return 0;
}
~ $ g++ input.cc -o input
~ $ ./input
Quadratic equation: a*X^2 + b*X + c = 0 main menu:
<r> Give new coefficients
<c> Calculate equations solutions
<t> Terminate the program
Enter choice : a
Invalid choice!
Quadratic equation: a*X^2 + b*X + c = 0 main menu:
<r> Give new coefficients
<c> Calculate equations solutions
<t> Terminate the program
Enter choice : c
got 'c'
Quadratic equation: a*X^2 + b*X + c = 0 main menu:
<r> Give new coefficients
<c> Calculate equations solutions
<t> Terminate the program
Enter choice : t
got 't'
~ $