C++ 获取错误“;“float'”类型的操作数无效;和'int';到二进制`运算符^'&引用;C++;
编译时不断将“类型为C++ 获取错误“;“float'”类型的操作数无效;和'int';到二进制`运算符^'&引用;C++;,c++,function,C++,Function,编译时不断将“类型为float'和int'的无效操作数”错误转换为二进制“operator^”。我认为这是4/3的问题,但我不确定如何使其工作。我想我只是缺少了一个简单的代码部分,但我花了一个多小时试图解决它 #include <iostream> #define Pi 3.14159265359 using namespace std; float SphereVol (float r) { float vol; vol = ((4/3)*(Pi)*(
float'和
int'的无效操作数”错误转换为二进制“operator^”。我认为这是4/3的问题,但我不确定如何使其工作。我想我只是缺少了一个简单的代码部分,但我花了一个多小时试图解决它
#include <iostream>
#define Pi 3.14159265359
using namespace std;
float SphereVol (float r)
{
float vol;
vol = ((4/3)*(Pi)*(r^3));
return vol;
}
int main()
{
float r, f = SphereVol(r);
for (r=0; r=4; r+(.2))
{
cout.precision(7);
cout << "Radius: " << r << " volume: " << SphereVol(r) << endl;
}
system("pause");
return 0;
}
现在显示小数
示例:radius=3.2000005
半径=3.40000006
它应该显示为
半径:0.200000体积:0.033503
半径:0.400000体积:0.268082
半径:0.600000体积:0.904778
半径:0.800000体积:2.14466
RADIUS:1卷:C++中的4.18879个/<代码> < P>(也在C中),<代码> ^ 运算符是只对整数类型工作的位异或(XOR)运算符。
将数字提高到幂并不是幂运算符
您可以像这样重写函数:
float SphereVol (float r)
{
return (float) (4.0 / 3.0 * Pi * r * r * r);
}
在代码中,表达式(4/3)将使用整数数学完成,它将丢弃任何余数并计算为1。在上面的代码中,我使用4.0和3.0强制对除法和后续乘法进行双精度浮点运算。然后,我将双精度结果转换为单精度浮点,以匹配函数的返回类型
为了更一般地将数字提升为幂,如果您#include
,则可以使用std::pow函数:
确保float
具有足够的数学精度。您可能更喜欢使用精度更高的double
此外,循环语法错误。您编写循环的方式将导致无限循环。请尝试以下方法:
for (r = 0; r <= 4; r += 0.2)
问题中的4/3
是整数除法。在这个答案中,(float)4/3
是浮点除法;(float)“<代码> >应用于常量<代码> 4代码/代码>,而不是表达式<代码> 4/3代码>代码。仍然可以写<代码> 4 /3 < /COD>。还有一个<代码> POW函数,但在这种情况下它是多余的。嘿,我注意到我的问题被很多人否决了。我是C++新手,刚刚开始学习和教授。让我们自己和它的在线,所以我没有实验室来学习它,所以我来这里。有什么好的书来学习C++的彻底的?还有其他论坛,我可以在我学习的时候问问题?建议是先学习C。C是一个简单得多的语言,在大多数情况下,C++是一个小的子集。如果你还没有,它将使你感到舒服很多,使用过程、指针、动态内存分配等等。一旦你在C语言中有了一个不错的句柄,那么我建议学习所有的东西。在你已经尝试解决这些问题的时候,只要问好的书面问题。现在就展示你的工作并寻求帮助。@ JSulult410感谢你的反馈。我在想,但是我听说学习C首先会让你养成C++ C++的坏习惯。你拒绝在C到C++中适当地学习习惯。C仍然是这样一种简单的语言,它在很大程度上是C++的一个子集,C++的一个很好的理解对于C++程序员来说是非常有价值的,而不是说“输出出来奇怪”。",发布你得到的输出,并解释它与你期望的不同。此外,编辑应该是一个新问题,因为它与原始问题无关。如果你想看到尾随的零,那么你必须使用cout抱歉,我是新手。这就是为什么我所有的东西都不断被否决的原因我不清楚这是怎么回事有效。你能帮我查一下代码吗?我已经被困在这个问题上一个小时了。最后4个出现了radius=x.0000001
是的,那是因为浮点不精确。你可以使用double
而不是float
来获得额外的精度。除此之外,除了用l显示之外,你无能为力ess精度,或停止对r
使用浮点,以了解更多信息。
for (r = 0; r <= 4; r += 0.2)