【发布时间】:2020-08-10 11:11:51
【问题描述】:
我是静态类型 C++ 的新手。在 JavaScript 中,我可以先检查数据类型,但这似乎非常 complicated,答案似乎都暗示您没有“获得”该语言。
这是我用来测试 rand() 的代码,我遇到了将字符串转换为整数的问题:
int main(){
std::string input;
cout <<endl<< "What to do?"<<endl;
cin >> input;
if (input == "rand")
{
cout << "what is the max?" << endl;
cin >> input;
int number;
if (stoi(input) > 1) {
number = stoi(input);
}
else {
number = 10;
cout << "using 10"<<endl;
}
cout << rand() % stoi(input);
return main();
}
}
所以在 Javascript 中,我只会检查输入或结果的类型,但人们在 C++ 中会做什么?
不允许在 cmets 中说谢谢,所以我在这里说谢谢!
【问题讨论】:
-
不要检查输入的类型(无论如何它都会是一个字符串),检查它的值是否可以通过
stoi转换为有效的整数。对此提出了解决方案here。 -
问题不是关于
std::atoi(它不执行任何检查),而是关于std::stoi(以及扩展名std::strtoi)。 -
部分问题是您认为什么是有效数字?
stoi有自己的定义,如前所述,如果不满足,它会抛出异常。如果stoi没有做你想做的事,那么只需在input上执行你自己的测试,也许使用正则表达式。 -
您在两个位置设置了
number,但它从未使用过。可能应该只调用一次stoi(input),然后用它来设置number,然后在代码中那个位置之后使用数字。