C++ STOI有时会用空格发送异常

C++ STOI有时会用空格发送异常,c++,visual-studio,c++11,integer,C++,Visual Studio,C++11,Integer,所以这对一些人来说可能是一个非常明显的问题,但我不知道从哪里开始这个错误 我有一些代码从.txt文件中读取一些字符串,所有字符串都有一个:然后在一个数字之后。例如: 每种颜色的对象:1 机器人数量:10台 预定义位置:1 当我手工编辑值时,stoi工作正常,但是当c代码将值写入我手工检查过的同一个文件时,请注意,stoi抱怨的内容相同,没有多余的空格,没有多余的字符,视觉上没有任何不同。我的代码是下一个: c++: 其中param是字符串列表 希望我足够清楚,知道吗?提前谢谢

所以这对一些人来说可能是一个非常明显的问题,但我不知道从哪里开始这个错误

我有一些代码从.txt文件中读取一些字符串,所有字符串都有一个:然后在一个数字之后。例如:

每种颜色的对象:1

机器人数量:10台

预定义位置:1

当我手工编辑值时,stoi工作正常,但是当c代码将值写入我手工检查过的同一个文件时,请注意,stoi抱怨的内容相同,没有多余的空格,没有多余的字符,视觉上没有任何不同。我的代码是下一个:

c++:

其中param是字符串列表


希望我足够清楚,知道吗?提前谢谢是的,如果stoi未获得输入,它将抛出异常,并可以将其转换为整数-空格字符既不是数字,也不能是数字的一部分。你可以在输入到stoi之前删除前面的空间来修剪输入,这应该可以解决你的问题

string trim(string num)
{
  string res = "";
  if (num[0] == ' ') {
    res = num.substr(1);
  }
  return res;
}

这应该做的工作,假设前面只有你有空间字符

你考虑过字符编码吗?也许你的C写文件是“UTF-8”,正如我所知,“stoi”处理的是“ASCII”,例外是什么?例如,ex.What返回什么?@Freeman Zhang,你可能在搞什么。。。我来看看。@Anon-Mail,基本上是一个无效的参数异常。我猜C和编辑器会有不同的换行符。阅读时,在正确的行之间会出现空行,这就解释了为什么在cfgVals中会出现异常并仍然获得正确的值。事实上,这是一个错误的编码!
File.WriteAllLines(@nameFile, param);
string trim(string num)
{
  string res = "";
  if (num[0] == ' ') {
    res = num.substr(1);
  }
  return res;
}