c++ - C++ 中的用户输入验证测试
问题描述
我在“Bjarne Stroustrup Programming Principles and Practice Using C++”第 5 章的练习 9 中遇到了问题。
这一章是关于错误的,练习说“如果结果不能表示为 int,则修改练习 8 中的程序以写出错误”。
我尝试过使用各种变体
if (!cin)
error("Input is not an integer");
但是,我遇到的问题是,如果我读入的不是整数,它将显示所有错误或仅显示“您想对比输入更多的值求和”错误。
这是我在尝试添加用户输入错误之前来自练习 8 的完整代码:
#include <iostream>
#include "../../std_lib_facilities.h"
int main()
{
try {
int size = 0;
int numbers = 0;
int sum = 0;
vector<int>values;
cout << "Please enter how many numbers you want to sum\n";
cin >> size;
if (size < 1)
error("you have to enter at least one value!");
cout << "enter some integers and then | to sum them\n";
while (cin >> numbers)
values.push_back(numbers);
if (values.size() < size)
error(" You wanted to sum more values than you entered. ");
cout << "the sum of the first " << size << " numbers ( ";
for (int i = 0; i < size; ++i) {
sum += values[i];
cout << values[i] << " ";
}
cout << ") is : " << sum << "\n";
return 0;
}
catch (exception& e) {
cerr << "Error: " << e.what() << "\n";
keep_window_open();
return 1;
}
catch (...) {
cerr << "Oops: Unknown exception!\n";
keep_window_open();
return 2;
}
}
解决方案
我认为您可以使用cin.fail()
方法来检测错误的输入。
例如
int numbers = 0;
cin >> numbers;
if (cin.fail())
{
/* run when the input is not integer. */
}
推荐阅读
- python - Django ModuleNotFoundError:从 docker 启动时没有名为“architect”的模块
- c++ - Vcpkg Pango CMake 构建失败缺少头文件
- java - 无法在 Eclipse 中初始化类 com.genuitec.eclipse.code.webicons.WebIcon
- java - 新手将过程编程重构为 OOP HASHING 函数
- jupyter-notebook - 有没有办法在 Jupyter 笔记本中安装软件包,而不必每次打开笔记本时都重新加载它们?
- sql-server - docker inspect --format '{{.NetworkSettings.Networks.nat.IPAddress}}' sql1 返回'
' - sapper - 单击按钮后获取道具值的苗条方式-在父组件中并传递给子组件
- google-cloud-platform - 无法使用自定义内存指标自动缩放 GCP 实例
- android - 与 Android 设备中的像素密度混淆
- python - 访问列表 Python 中的特定字符串以在不同的列中分隔