C++ 在c+中从字符串逐字符传递到整型字符时不精确+;

C++ 在c+中从字符串逐字符传递到整型字符时不精确+;,c++,type-conversion,int,character,C++,Type Conversion,Int,Character,首先,我从geline(cin,s)获取字符串,输入形式为:10049。我不能接受正常的cin,因为我需要知道geline(cin,s)在哪里使s为空,这意味着是一个空行,我应该停止程序。 从字符串“99”(或100以下的任何其他数字)传递到int 99时没有问题。但当我尝试一个大于99的数字时,它给出了(数字-1)。我还发现,数字在1000以下时会出现这种情况,但从1000到10000是可以的,但我测试了大于10^4的数字,并再次给出了(数字-1)。 下面是我转换字符串的代码 //Search

首先,我从geline(cin,s)获取字符串,输入形式为:10049。我不能接受正常的cin,因为我需要知道geline(cin,s)在哪里使s为空,这意味着是一个空行,我应该停止程序。 从字符串“99”(或100以下的任何其他数字)传递到int 99时没有问题。但当我尝试一个大于99的数字时,它给出了(数字-1)。我还发现,数字在1000以下时会出现这种情况,但从1000到10000是可以的,但我测试了大于10^4的数字,并再次给出了(数字-1)。 下面是我转换字符串的代码

//Search how many nums are in the string wer are passing until an space or new line

int nums = 0;

for(int j = i; j < s.size(); j++){
  if(s[j] == ' ' || s[j] == '\n') break;
  nums++;
 }

 //pass to the variable time the string character by character
 int time = 0;

 while(nums--){
    time += (s[i] - '0') * (pow(10, nums));
    i++;
}
//搜索在一个空格或新行之前,wer传递的字符串中有多少NUM
int nums=0;
对于(int j=i;j
我想知道我的电脑是否有错误或者我遗漏了什么

首先,我从geline(cin,s)获取字符串,输入的形式是:10049

最简单的解决方案是使用
std::istringstream

int i1 = 0, i2 = 0;
std::istringstream( s ) >> i1 >> i2;
首先,我从geline(cin,s)获取字符串,输入的形式是:10049

最简单的解决方案是使用
std::istringstream

int i1 = 0, i2 = 0;
std::istringstream( s ) >> i1 >> i2;

离题了,但我敢打赌,无论你想做什么,都不需要使用浮点函数,例如
pow
。请编辑你的问题,使其包含在内,因为你遗漏了大部分内容code@PaulMcKenziepow可能是这种奇怪行为的原因?请查阅atoi()。“pow可能是这种奇怪行为的原因?”很可能不是,至少不是直接的。但使用2个循环和
pow()
是低效且复杂的方法。一个循环就足够了。离题,但我敢打赌,无论你想完成什么,都不需要使用浮点函数,例如
pow
。请编辑你的问题,使其包含在内,因为你遗漏了大部分内容code@PaulMcKenziepow可能是这种奇怪行为的原因?请查阅atoi()。“pow可能是这种奇怪行为的原因?”很可能不是,至少不是直接的。但是使用两个循环和
pow()
是低效和复杂的方式。一个循环就足够了。