Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么下面的变量赋值不能正常工作?_C++_Visual Studio Code_C++14 - Fatal编程技术网

C++ 为什么下面的变量赋值不能正常工作?

C++ 为什么下面的变量赋值不能正常工作?,c++,visual-studio-code,c++14,C++,Visual Studio Code,C++14,我试图将用户输入的字符串转换为int,方法是将每个字符转换为int,然后乘以相应的指数。在我需要将结果值分配给int变量之前,一切都正常工作。当指定的值介于100和1000之间时,它总是比正确的值小一个。 i、 e.int k=0;k+=100但打印k显示99。但是k+=1000工作正常 我找到的解决方案是改变被乘数和乘数的顺序,但造成这种情况的原因仍然未知 string k_input; cin >> k_input; int k = 0; for (int i = 0; i &l

我试图将用户输入的字符串转换为
int
,方法是将每个字符转换为
int
,然后乘以相应的指数。在我需要将结果值分配给
int
变量之前,一切都正常工作。当指定的值介于100和1000之间时,它总是比正确的值小一个。 i、 e.
int k=0;k+=100但打印k显示99。但是
k+=1000
工作正常

我找到的解决方案是改变被乘数和乘数的顺序,但造成这种情况的原因仍然未知

string k_input;
cin >> k_input;
int k = 0;
for (int i = 0; i < k_input.length(); i++)
{
    cout << (k_input[i] - '0') << " " << pow(10, (k_input.length() - i) - 1) << endl;

    k += (k_input[i] - '0') * pow(10, k_input.length() - i - 1);
}
字符串k_输入;
cin>>k_输入;
int k=0;
对于(int i=0;icout问题很可能是特定于编译器和/或平台的,几乎可以肯定的是,在将计算的
双精度
输出转换为
int
值时出现“舍入”错误。您可以使用
lrund
函数(在
中定义)来解决此问题:

k+=lrund((k_输入[i]-'0')*pow(10,k_输入.length()-i-1));
顺便说一句,打开编译器警告将突出显示如下问题!对于您的代码,在Visual Studio中,我看到:

warning C4244: '+=': conversion from 'double' to 'int', possible loss of data

您知道在C++中有更好的方法将字符串转换成整数,对吗?BTW,您的代码似乎是有效的。我知道,这不是我的代码。我在找我的室友。这个问题让我有点好奇。我刚尝试过您的代码,它的工作与预期一样,代码<> 123 /代码>:“我知道,这不是我的密码。我在找我的室友。”那么谁的代码不起作用了?因为你发布的代码起作用了。哇,我可能找到了问题的原因。我在两台不同的计算机上尝试了该代码(都是vscode),并得到相同的错误。但在联机编译器上运行它是正确的。因此,可能有一些环境设置是错误的?这是有效的,但为什么更改乘法器和乘法器的顺序可以解决问题?可能就像你所说的,编译器错误?我发布的代码中没有“顺序更改”!这不是“错误”-这是一个错误功能:数字
3
的二进制浮点表示形式实际上可能是
2.9999999
,它将转换为
int
作为
2
。函数会找到最接近的整数,这就是您想要的。很抱歉,我的意思是我尝试切换顺序,问题得到了解决。谢谢您的帮助他解释得很好。一定会尝试lround函数。