我是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> Terminate the program";
现在我想要的是,当用户输入:
时只有当用户正确地输入3个简单字符(r,c,t NONSENZTIVE CASE)中的一个时才能做某事。否则,应打印无效输入按钮,然后再显示主菜单
我尝试了这个,但它不起作用:
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;
}
我希望你能帮助我
增加: 当我错误地输入例如:cbbbbbb 它需要它好像是'c'
答案 0 :(得分:2)
要通过“cbbb”被接受为“c”,您必须使用getline()来读取一行。然后你可以检查只输入了一个字符,然后检查是哪个字符。
如果使用cin读取字符,它只会读取输入流中可用的第一个字符。
答案 1 :(得分:1)
更改此行:
cout<<"Enter choice : " << std::endl;
// ^^^^^^^^^^^^^^^
此打印'\ n'然后强制缓冲区刷新到输出,以便可以读取。
如果您只想刷新缓冲区:
cout<<"Enter choice : " << std::flush;
删除if语句。您不需要使用开关进行错误检查。
// if( isalpha(choice) )
答案 2 :(得分:1)
首先,忽略if( isalpha(choice) )
。这不是必需的,因为除r
,c
或t
之外的任何输入都将落实到default
。
实际上,这可能是您遇到问题的原因。如果输入的字符不是字母数字,则函数将结束而不显示错误消息。
总的来说,我的建议是:不要认为太复杂。开关的美妙之处在于您可以根据完全匹配进行操作,所有其他将落到default
答案 3 :(得分:1)
“我试过这个但它不起作用”是什么意思?你得到什么输出?你是说它不编译? (它不会在您展示的状态)。你的意思是那个程序有更多的东西,然后我们看到的却会产生意想不到的结果吗?我们没有足够的调试这个。对于它的价值,我没有看到任何错误(除了它显然是不完整的):
#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'
~ $
更新我看到它没有为非数字提供“无效选择”消息,但可以通过删除“isalpha”检查来解决此问题。