gpt4 book ai didi

c++显式类型转换给出了错误的答案

转载 作者:行者123 更新时间:2023-11-28 02:54:51 28 4
gpt4 key购买 nike

为什么我在 C++ 中将 int 转换为 float 是错误的?在某个程序中,我明确地将值为 10 或 14 的整数转换为 float ,结果得到 0。为什么会这样?我尝试了 static_cast,结果相同。由于 int 和 float 都是 4 个字节,我认为 int 到 float 的转换不是按大小降级或提升?它与舍入误差等有关吗?有人可以解释一下吗。

这是代码(这里有一个改动可以正常工作,但我仍然不知道为什么)---

#include <iostream>
using namespace std;

int main()
{

int n;
int sum;

cout << "Please enter the number:";
cin >> n;

int *elements = new int[n];

cout << "Please enter the elements:";
for(int i=0; i<n; i++)
{
cin >> elements[i];
}
cout << endl;

///// this approach, gives the sum right, but float(sum) fails and always gives zero.

for(int i=0, sum=0; i < n; i++)
{
sum = sum + elements[i];
}

////// This works, when sum is initialised outside of for loop. float(sum) does the right conversion as well.
//sum = 0;
//for(int i=0; i < n; i++)
//{
// sum = sum + elements[i];
//}

cout << " float n is " << float(n) << " float sum is "<< float(sum) << endl;
// float(sum) is zero, when sum is initialised from within for loop.

delete[] elements;

return 0;
}

编译命令 -> g++ 3.2.cpp -o 3.2

输入:n = 4;元素 = 1 2 3 4

感觉像是我忽略了一些小事。

感谢您的帮助。

最佳答案

您有两个不同的sum 变量。您在 for 循环中初始化的 sum 实际上仅限于 for 循环,就像 i 计数器一样。当您执行 for (int i = 0, sum = 0; ... 时,您正在创建两个新变量,isum, for 循环。因此,您在 for 循环中更新的 sum 变量不是您认为的 sum 变量(它是隐藏你想要的 sum 变量)。

这就是为什么从一开始就发布您的真实代码很重要。像这样的小细节很重要。

关于c++显式类型转换给出了错误的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22243400/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com