_wtoi返回零:输入零或非数字输入?

时间:2012-05-21 16:17:04

标签: c++ visual-c++

_wtoi当无法转换输入时,因此输入不是整数,返回零。但同时输入可以为零。它是一种确定输入错误还是零的方法?

1 个答案:

答案 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
}