_wtoi 返回零:输入零还是输入非数字?

Ale*_*ecs 4 c++ visual-c++

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

Mah*_*dsi 5

这是 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;
}
Run Code Online (Sandbox Code Playgroud)

boost 存在一个更干净、更简单的解决方案lexical_cast

#include <boost/lexcal_cast.hpp>

// ...
std::string s = "1234";
int i = boost::lexical_cast<int>(s);
Run Code Online (Sandbox Code Playgroud)

如果你坚持使用C,sscanf可以干净地做到这一点。

const char *s = "1234";
int i = -1;

if(sscanf(s, "%d", &i) == EOF)
{
    //error
}
Run Code Online (Sandbox Code Playgroud)

您也可以使用strtol,但需要一点思考。是的,对于计算为零的字符串和错误,它都会返回零,但它还有一个(可选)参数endptr,该参数将指向已转换的数字之后的下一个字符:

const char *s = "1234";
const char *endPtr;
int i = strtol(s, &endPtr, 10);

if (*endPtr != NULL) {
    //error
}
Run Code Online (Sandbox Code Playgroud)