_wtoi当无法转换输入时,因此输入不是整数,返回零。但同时输入可以为零。它是一种确定输入错误还是零的方法?
答案 0 :(得分:4)
这是C ++,您应该使用stringstream
进行转换:
#include <iostream>
#include <sstream>
int main()
{
using namespace std;
string s = "1234";
stringstream ss;
ss << s;
int i;
ss >> i;
if (ss.fail( ))
{
throw someWeirdException;
}
cout << i << endl;
return 0;
}
使用boost lexical_cast
:
#include <boost/lexcal_cast.hpp>
// ...
std::string s = "1234";
int i = boost::lexical_cast<int>(s);
如果您坚持使用C,sscanf
可以干净利落地完成此任务。
const char *s = "1234";
int i = -1;
if(sscanf(s, "%d", &i) == EOF)
{
//error
}
你也可以使用strtol
,但需要一点思考。是的,对于评估为零和错误的两个字符串,它将返回零,但它还有一个(可选)参数endptr
,它将指向已转换的数字后面的下一个字符:
const char *s = "1234";
const char *endPtr;
int i = strtol(s, &endPtr, 10);
if (*endPtr != NULL) {
//error
}