错误处理-何时占用用户输入部分2
error-handling-when-taking-user-input part2
我之前提出了一个问题:接受用户输入时的错误处理
我进行了建议的更改:
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();
switch(tolower(choice))
{
case 'r':
cout<<"Entered case 'r'";
break;
case 'c':
cout<<"Entered case 'c'";
break;
case 't':
cout<<"Entered case 't'";
break;
default:
cout<<"Invalid choice! Try again"<<endl;
}
}
return 0;
}
新的问题是,如果用户错误地输入,让我们说"ter",我会得到以下:(:
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 : ter
Entered case 't'
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 : Invalid choice! Try again
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 : Invalid choice! Try again
我怎样才能避免这种情况发生??
在 displayMainMenu()
函数中,不是在char
中读取,而是在字符串中读取。 丢弃(带有警告)任何长度大于一个字符的输入。
您可以使用
char str[101]
std::cin.getline(str, 101);
代替
cin >> mainMenuChoice;
为了读取字符串。
试试这个:
string displayMainMenu()
{
string 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 : ";
getline(cin, mainMenuChoice);
return mainMenuChoice;
}
int main()
{
bool done = false;
while(!done)
{
string choice = displayMainMenu();
if (choice.size() > 1 || choice.size() < 0)
cout<<"Invalid choice! Try again"<<endl;
switch(tolower(choice[0]))
{
case 'r':
cout<<"Entered case 'r'";
break;
case 'c':
cout<<"Entered case 'c'";
break;
case 't':
cout<<"Entered case 't'";
break;
default:
cout<<"Invalid choice! Try again"<<endl;
}
}
return 0;
}
使用 getline(istream, string &) 一次读取一整行(不包括 eol)。 检查它的长度是否正确,然后只查看第一个字符。
相关文章:
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- C++MySQL C api用户输入行
- 用户定义函数中的指针和输入
- 如何只允许用户输入正整数
- C++如何计算用户输入的数字中的偶数位数
- 通过for循环使用用户输入填充列表
- 这是我尝试让用户将值输入到数组中.然后将其隐藏为大量的星号
- 在C++中,我如何接受不同于同一行的用户输入
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- 当用户键入分隔符时,停止getline()输入
- 通过错误处理,在C++中可靠地获得用户十六进制输入
- 当用户在qtablewidget中输入单元格时,如何获得信号?C++
- 显示基于用户输入的整数的字符
- 根据用户输入用字母填充矢量,并将"开始"和"结束"放在四肢
- 现代Windows输入API/用户交互API
- C++ 将数据输入到用户定义类型的向量
- 在 c++ 中处理代码的命令行参数,用于随机输入和用户输入
- 我需要让一个数字输入的用户输出单个数字使用c++