编写具有3个重载的函数GetVolume()
。如果传入一个值,请找到以该值为半径的球体的体积。如果传入两个值,请找到圆柱体的体积,并以其值为半径和高度。如果传入三个值,请找到一个盒子的体积,并以三个值作为其长度,宽度和高度。
#include <iostream>
#include <cmath>
using namespace std;
double PI = 3.14;
double GetVolume(double r)
{
cout << "Sphere's volume is: ";
return ((4 * PI * pow (r , 3.0))/3);
}
double GetVolume(double r, double h)
{
cout << "Cylinder's volume is: ";
return (PI * pow (r, 2) * h);
}
double GetVolume(double l, double h, double w)
{
cout << "Box's volume is: ";
return (w * l * h);
}
int main()
{
double num = 0, num1 = 0, num2 = 0, num3 = 0;
double ans1, ans2, ans3;
cout << "Please enter 1, 2, or 3 numbers depending on whether you want the volume of a sphere, cylinder, or a box." << endl;
cin >> num1, num2, num3;
ans1 = GetVolume(num1);
ans2 = GetVolume(num1, num2);
ans3 = GetVolume(num1, num2, num3);
cout << ans1 << ans2 << ans3 << endl;
system("pause");
return 0;
}
我无法弄清楚为什么我无法使用getvolume
函数基于cin
插入的数字来显示三个不同的结果,我在最上面附加了我的问题必须回答五部分作业中的第三部分。抱歉,如果这还不够,我会尽力提供更多信息。
答案 0 :(得分:3)
您仅从这一行的标准输入中读取一个数字
cin >> num1, num2, num3;
此处的逗号为operator,
,它计算多个表达式并丢弃除最后一个表达式之外的所有表达式。如果您想读取多个数字,则需要链接>>
cin >> num1 >> num2 >> num3;
但是,您似乎想知道输入了多少个数字,可以通过查看operator>>
返回的值来进行测试。
if (!(cin >> num1)) {
cout << "no numbers entered";
} else if (!(cin >> num2)) {
cout << GetVolume(num1);
} else if (!(cin >> num3)) {
cout << GetVolume(num1, num2);
} else {
cout << GetVolume(num1, num2, num3);
}
答案 1 :(得分:1)
您可能想了解有关c ++中的逗号运算符的信息。 https://en.cppreference.com/w/cpp/language/operator_other
基本上在该行中,
num = GetVolume(num1), GetVolume(num1,num2), GetVolume(num1, num2, num3);
GetVolume(num1)
得到评估。然后将结果丢弃。
然后评估GetVolume(num1,num2)
。结果,丢弃
最后GetVolume(num1, num2, num3)
得到评估,其结果由operator =
的RHS上的(Expr,Expr,Expr)返回。
然后将该返回值分配给num
。这就是为什么您只看到一个答案的原因。
类似地,您的cin >> num1, num2, num3;
仅接受一次输入,即num3。
可能的解决方法
int ans1, ans2, ans3;
cin >> num1 >> num2 >> num3;
ans1 = GetVolume(num1);
ans2 = GetVolume(num1, num2);
ans3 = GetVolume(num1, num2, num3);
您从函数中返回类型double
,但将它们存储在int中。这具有很大的精度损失。我相信您想改为存储一个double。
您的cout
和以下代码似乎不一致。也许您希望自己先输入一个。测试它是1,2还是3。然后采取相应措施。
答案 2 :(得分:0)
您可以像下面那样声明类和重载restore headeronly
函数
GetVolume
上面的代码将给出输出double PI = 3.14;
class calculateVolume {
public:
double GetVolume(double r)
{
cout << "Sphere's volume is: ";
return ((4 * PI * pow (r , 3.0))/3);
}
double GetVolume(double r, double h)
{
cout << "Cylinder's volume is: ";
return (PI * pow (r, 2) * h);
}
double GetVolume(double l, double h, double w)
{
cout << "Box's volume is: ";
return (w * l * h);
}
}
int main() {
calculateVolume volObject;
cout<<volObject.GetVolume(5);
return 0;
}
这只是工作片段,您可以根据需要调整代码
答案 3 :(得分:0)
将answer扩展为Caleth,如果OP的问题(除逗号运算符之外)是如何根据用户输入的数字选择特定功能,我们可能会读整行使用std::getline
从输入流中提取,然后使用std::stringstream
,一次提取一个数字。
using std::cout;
cout << "Please enter 1, 2, or 3 numbers depending on whether you want"
"the volume of a sphere, cylinder, or a box.\n";
std::string line;
while ( std::getline(std::cin, line) )
{
if (line.empty())
continue;
std::istringstream ss {line};
double num_1, num_2, num_3;
if ( !(ss >> num_1) )
{
cout << "No number in input.\n";
continue;
}
else if ( !(ss >> num_2) )
{
cout << "Sphere's volume is: " << GetVolume(num_1) << '\n';
}
else if ( !(ss >> num_3) )
{
cout << "Cylinder's volume is: " << GetVolume(num_1, num_2) << '\n';
}
else // Other numbers in the line will be ignored.
{
cout << "Box's volume is: " << GetVolume(num_1, num_2, num_3) << '\n';
}
}
实时示例HERE。