我编译此代码时遇到问题,但它无法正常运行。这是我的源代码:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
float height;
float radius;
float volume;
volume=.3333333333333333333333333333333*radius*radius*height;
cout<<"Enter height:"<<endl;
cin>>height;
cout<<"Enter radius:"<<endl;
cin>>radius;
if(height==0&&radius==0){
cout<<"Not a valid solution";
}
if(height==0&&radius!=0){
cout<<"not a valid a solution"<<endl;
}
if(height!=0&&radius==0){
cout<<"not a valid solution"<<endl;
}
if(height<0&&radius<0){
cout<<"Not a valid solution";
}
if(height<0&&radius>0){
cout<<"Not a valid solution";
}
if(height>0&&radius<0){
cout<<"Not a valid solution";
}
if(height>0&&radius>0){
cout<<"Volume is "<<volume<<endl;
}
return 0;
}
但是当我运行它并要求我输入半径和高度的值时,音量总是为零:这就是我的意思:
Enter height:
9.0
Enter radius:
9.0
Volume is 0
我做错了什么?
答案 0 :(得分:5)
C ++是一种顺序编程语言,而不是声明性语言。语句通常从上到下执行(除了函数调用,goto和循环之类的跳转指令)。所以当你这样做时:
volume=.3333333333333333333333333333333*radius*radius*height;
计算使用radius
和height
的当前值(在执行此语句时都未初始化)。 volume
和radius
稍后更改时,height
的值不会更新。将之后的语句放在用户输入的值之后。
如果您希望使用volume
和height
自动更新radius
的值,则可以将其设为lambda:
auto volume = [&radius,&height]() {
return .3333333333333333333333333333333*radius*radius*height;
};
cin >> radius >> height;
cout << volume() << '\n';
顺便说一句,你有很多冗余的检查。您的所有if
语句都可以简化为:
if (height <= 0 || radius <= 0) {
// not a valid solution
}
else {
// calculate and print solution
}
答案 1 :(得分:2)
非常确定你在设置高度和半径之前设置音量,尝试将其移到cin下面然后如果它仍然不起作用则返回
答案 2 :(得分:2)
您在接受用户输入之前计算volume
。移动线
volume=.3333333333333333333333333333333*radius*radius*height;
到
之后cin>>radius;
答案 3 :(得分:1)
此行已在编译时计算:
volume=.3333333333333333333333333333333*radius*radius*height;
您最好的选择是创建一个函数并在用户输入半径和高度后调用它:
float calculate_volume(float r, float h)
{
return .3333333333333333333333333333333*r*r*h;
}
if(height>0&&radius>0){
cout<<"Volume is "<< calculate_volume(radius, height) <<endl;
}