带数字和字符串的输入验证
Input Validation w/ numbers&strings
所以我刚刚学会了输入验证,但是我遇到了一个问题。我强迫用户输入一个数字而不是一个有效的字符串,但是如果用户输入一个数字(一个包含在switch case中)和一个字符串,那么程序就会崩溃。有什么建议要改变,使验证工作在一切?
int menu(double pi) //menu for choosing a shape
{
int choice = 0;
cout << "Please select what you wish to calculate:nn1 - Area of a Circlenn2 - Circumference of a Circlenn3 - Area of a Rectanglenn4 - Area of a Trianglenn5 - Volume of a Cuboidnn ";
while (!(cin >> choice))
{
cout << "Invalid input, please enter a number of 1-5nn";
cin.clear();
cin.ignore(100, 'n');
}
system("CLS");
switch (choice) //switch case for each shape
{
case 1:
circleArea(pi);
break;
case 2:
circleCircum(pi);
break;
case 3:
rectanArea();
break;
case 4:
triangArea();
break;
case 5:
cubVol();
break;
default:
cout << "Invalid input! Please try again.nn";
break;
}
return 0;
}
使用
的问题cin >> choice
当输入一个数字时,>>
将在第一个非数字输入处停止,只要有数字输入开始,它就会将其视为有效读取。这意味着,就cin
而言,2L
、2.0
和-1T
都是有效的整数输入。它只是将无效的部分留在流中。正是这些剩余的蒸汽输入使程序在下一个输入操作中出错。
getline
将输入读入std::string
,然后解析字符串以确保它包含有效的输入。如果你想获得一个int
,例如
int choice;
std::string input;
std::size_t pos;
do
{
std::cout << "Enter Choice: ";
std::getline(cin,input);
choice = stoi(input, &pos);
} while(pos != input.size());
这可以确保您读取所有内容,直到按下回车键进入input
,并且只有在输入的所有内容可以转换为有效的int
时才停止循环。
相关文章:
- 正在尝试了解输入验证循环
- 如何在C++中检查2D数组中负值的输入验证
- cin 的十进制输入验证?
- 输入验证以筛选出字符、字符串和一系列整数
- 输入验证将数字放入向量中
- 在C++中使用字符数组进行输入验证
- 在C++中使用字符数组进行用户输入验证
- C++ 中字符数组的输入验证
- 检查节点的输入验证的整数
- 如何让我的程序在输入验证的基础上读取素数
- C++ 用户输入验证无法正常工作
- 程序终止,而不是继续整数输入验证循环
- 使用REGEX进行电子邮件输入验证C
- C++:输入验证器函数
- 将用户输入验证为整数:用户必须两次输入输入
- C 输入验证
- C :对输入验证函数进行编程的性能影响可以对其进行编程,而每次都可以将其编程
- 使用模板函数进行通用输入验证
- 为什么用于输入验证的 while 循环要么完全跳过循环,要么不考虑错误的输入
- 仅 C++ 字母和空格输入验证