为什么我的程序不对任何参数做出反应?

时间:2013-10-29 09:36:57

标签: c++ command-line-arguments argv

我在C ++中有一个简单的测试程序,它打印出一个圆的属性

#include <iostream>
#include <stdlib.h>
#include "circle.h" // contains the Circle class

using namespace std;

void print_circle_attributes(float r) {
    Circle* c = new Circle(r);
    cout << "radius: " << c->get_radius() << endl;
    cout << "diameter: " << c->get_diameter() << endl;
    cout << "area: " << c->get_area() << endl;
    cout << "circumference: " << c->get_circumference() << endl;
    cout << endl;
    delete c;
}

int main(int argc, const char* argv[]) {
    float input = atof(argv[0]);
    print_circle_attributes(input);
    return 0;
}

当我使用参数2.4运行程序时,它输出:

radius: 0.0
diameter: 0.0
area: 0.0
circumference: 0.0

我以前测试的程序没有参数,只是使用静态值,运行得很好;所以我知道我上课没什么不对......

那我在这里做错了什么?

2 个答案:

答案 0 :(得分:4)

argv[0]是要调用的可执行文件的名称。

您的第一个命令行参数将位于argv[1]

为了确保您的程序不会再次无声地失败,您应该检查实际拥有的参数数量以及atof是否返回值,并向用户显示相应的消息以解释问题。

答案 1 :(得分:4)

argv[0]是程序名称。你想要argv[1]作为第一个参数。

此外,在尝试访问argc之前,请检查std::stoi是否至少为2。您也可以考虑std::istringstreamstrtodatoi而不是new进行转换,因为它们可以检测到虚假输入。

最后,为什么在自动变量足够时使用{{1}}?你应该立即摆脱这种习惯,或者花费其余的时间调试内存泄漏。