用于计算圆锥体积的C ++程序

时间:2015-03-06 19:01:25

标签: c++

我编译此代码时遇到问题,但它无法正常运行。这是我的源代码:

#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

我做错了什么?

4 个答案:

答案 0 :(得分:5)

C ++是一种顺序编程语言,而不是声明性语言。语句通常从上到下执行(除了函数调用,goto和循环之类的跳转指令)。所以当你这样做时:

volume=.3333333333333333333333333333333*radius*radius*height;

计算使用radiusheight的当前值(在执行此语句时都未初始化)。 volumeradius稍后更改时,height的值不会更新。将之后的语句放在用户输入的值之后。

如果您希望使用volumeheight自动更新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;

}