嘿,这真的是我编过的第一件事。我想知道如何解决这个错误。我目前正在尝试做一些研究,但找不到任何有助于修复它的东西。
#include <iostream> // needed for Cin and Cout
#include <cmath>
#include <csmath>
using namespace std;
/************************************
* defines
*************************************/
#define PI 3.14159
/*************************************
* function prototype
*************************************/
int main()
{
//surface and volume
float radius;
float height;
float surfacearea;
float volume;
int pi = 3.14159
//Get the radius
cout << "enter the radius: ";
cin >> (float)radius;
//Get height
cout << "enter height: ";
cin >> height;
//Get the surfacearea
surfacearea = 2(pi*radius^2)+2(pi*radius)* height;
cout << "The surfacearea is: " << surfacearea;
//get volume
volume = (pi*radius)^2*height;
cout << "The volume is: " << volume << endl;
system ("pause");
return 0;
}
答案 0 :(得分:1)
将int
更改为double
pi
,因为pi
是一个浮点数,如评论中所述,它是C ++浮点数的默认值。除非有特殊原因要使用float
,否则请使用double
作为浮点数。
double pi = 3.14159;
警告将消失。
此外,您无需将输入转换为float
,只需:
cin >> radius;
此外,至少要将radius^2
更改为radius*radius
。
但更好的是,完全避免使用^
并使用std::pow
,其中一个例子可以是found here。
此外,您不需要#define PI 3.14159
,因为您从未使用它,并且您尝试在pi
中定义main()
。
答案 1 :(得分:0)
您最好在需要之前声明并初始化局部变量。对于像pi
这样的常量,最好使用const
和正确的类型。对于正确的类型,C ++ 11为您提供了一个很棒的工具 - auto
。 ^并不代表C ++中的强大功能,而是必须使用std::pow()
。所以你的代码应该是这样的:
const auto pi = 3.14159;
//Get the radius
auto radius = 0.0;
cout << "enter the radius: ";
cin >> radius;
//Get height
auto height = 0.0;
cout << "enter height: ";
cin >> height;
//Get the surfacearea
auto surfacearea = 2 * pi * pow( radius, 2.0 ) + 2 * pi * radius * height;
cout << "The surfacearea is: " << surfacearea << endl;
//get volume
auto volume = pow( pi*radius, 2.0 ) * height;
cout << "The volume is: " << volume << endl;
答案 2 :(得分:0)
首先,警告不是错误;如果它是编译错误,那么代码甚至不会编译。但是,由于它是一个警告,这意味着您的代码已经成功编译并运行,除了它在您的代码中产生了一些警告。现在你的代码中的错误:
首先,您对局部变量pi
的声明不正确。 pi
在您的代码中声明为数据类型 int 的变量,是 integer 的缩写。整数只是整数,正数和负数,但是一个比10 ^ 0更具特异性。现在的问题是你试图在int变量中存储一个十进制值。虽然编译器能够将十进制值转换为int值,但是会丢失该值的精度。那是因为它绕过了价值。如果您编译此示例代码:
int floating = 1.23456789;
cout << floating << endl;
它将输出1而不是1.23456789,原因是int变量不能存储float或double值;但它可以通过舍入它将此float或double值转换为int值。
因此,您应将pi
的声明更改为:
double pi = 3.14159; // By the way, you forgot to add a semicolon here
另一个问题:您在cin语句中使用了不必要的类型转换为半径:
cin >> (float)radius;
如果要更改特定操作的变量的数据类型,则需要使用转换(不要更改变量数据类型;只需将其值作为数据类型转换处理。在您的情况下,它是不需要的,因为radius
变量已经被声明为float的数据类型,在行中:
float radius;
因此,我建议您只需将此cin语句更改为:
cin >> radius;
还有一件事:代码中的以下行有问题:
surfacearea = 2(pi*radius^2)+2(pi*radius)* height;
volume = (pi*radius)^2*height;
“^”符号不会将数字提升为幂;它在c ++中被称为按位XOR运算符,如果它在一个操作数中设置而不是两者都设置,则它的目的是复制该位。您可以在此处找到有关它的更多信息:Bitwise Exclusive OR Operator: ^
在c ++中,如果你想将数字 x 提高到2的幂,那么你必须做x * x。或者,您可以使用pow()
功能,例如:pow(x, 2.0)
。对于你的代码,如果我们使用x * x方法,它就像:
surfacearea = 2(pi*radius*radius)+2(pi*radius)* height;
volume = (pi*radius)*(pi*radius)*height;
或者,如果我们使用pow()函数,那么代码将如下所示:
surfacearea = 2(pi*pow(radius, 2))+2(pi*radius)* height;
volume = pow((pi*radius), 2)*height;
修复这些问题应该可以使代码正常工作。