【发布时间】:2014-07-16 22:07:22
【问题描述】:
我正在尝试测试将字符串转换为整数,以确保字符串中的数据实际上是属于整数的数据。 (例如,用户输入 '!!!!' 所以我不希望它进入 int)。
我遇到的问题是,我希望能够在检测到无法进行转换后立即以某种方式抛出错误。我想在演员阵容期间或之后对其进行测试的原因是因为我需要用户的输入才能首先转到一个字符串。
我首先尝试执行“选项 1”,但我注意到会弹出某种调试错误,它不允许我抛出自己的错误并显示对用户更友好的错误。
然后我正在尝试选项 2(我认为我可以将验证包裹在演员表周围)但是当我观察变量类型时,它通过了选项 2,即使它显示为字符串并且我的代码似乎没有捕捉到它不是 int,因此抛出我的错误
我只会使用这两个选项之一,并清楚地注意两者。我只是把我的两个电子都放了
using namespace std;
#include <string>
#include <iostream>
#include <typeinfo>
int main()
{
string employeeNumber;
string hoursWorked;
int newEmployeeNumber;
cout << "What is your employee number?" << endl;
cin >> employeeNumber;
//CONVERT AND VERIFY CAST/CONVERSION OCCURRED SUCCESSFULLY
//IF NOT (ex. user entered '!!!' so it shouldnt be able to cast to int..
//THEN THROW MY ERROR
//option 1
newEmployeeNumber = stoi(employeeNumber);
throw MyErrorThatDoesntGetReached("notan int");
//(will throw its own error right there and I can't let it throw mine after
//option 2
if (typeid(stoi(employeeNumber)) != typeid(int) )
throw Exception("data in file is CORRUPT");
}
【问题讨论】:
-
为什么不在第一个地方声明
employeeNumber和int? -
检查输入操作的结果到
int。如果您需要检查整个字符串,使用一个参数调用stoi不会删除它。 -
捕捉 stoi 的异常,抛出你自己的。
标签: c++ validation