从命令行c ++计算两个数字

时间:2011-02-24 14:55:51

标签: c++ command-line-arguments

这是我的代码:

#include <iostream>
using namespace std;

int main (int argc, char* argv[])
{
  int frstNumb = atoi (argv[1]);
  int scndNumb = atoi (argv[2]);
  int sum = 0;
  sum = frstNumb + scndNumb;
}

好的,现在它正在为整数工作。我该怎么办呢?我的参数中有“2.5和1.2”?该程序不会计算这种数字。帮助

由于

4 个答案:

答案 0 :(得分:5)

参数始终作为字符串传递。首先,将主函数声明更改为

int main (int argc, char* argv[])

请注意,main的返回值必须为int,否则为非标准。

第二次将argv[1]argv[2]转换为atoi的整数,根据我的口味,这有点C-ish,尽管最简单,或boost::lexical_cast

e.g。

int i1 = atoi(argv[1]); //#include <cstdlib>
int i1 = boost::lexical_cast<int>(argv[1]); //#include <boost/lexical_cast.hpp>

答案 1 :(得分:2)

argv[1]argv[2]是字符串。当您执行总和时,请使用atoi()调用对它们进行包装,以便对它们进行解析并转换为整数。

感谢Mark Loeser和walkingTarget

您对main()的声明应该是:

int main(int argc, char **argv)

int main(int argc, char *argv[])

main()始终返回int,而argv 始终应为字符串数组。

答案 2 :(得分:2)

是的 - 你想要atoi()

int frstNumb = atoi(argv[1]);
int scndNumb = atoi(argv[2]);

我建议谷歌搜索atoi()以了解它是如何工作的,它可能会在将来帮助你。

答案 3 :(得分:1)

正如其他答案中所建议的,您首先需要更改函数声明main - argc表示传递给它的参数总数,argv是一个参数数组本身(每个argument是数组中的元素; first element - argv[0] - 是执行二进制文件的路径!argv[1]实际上是命令行的第一个参数。)

在C和C ++中,您都可以使用atoisscanf函数,但在C ++中,您应该利用STL stringstream的转换功能:

#include <iostream>
#include <sstream>
using namespace std;

int main(int argc, char* argv[]) 
{ 
    if(argc != 3)
    {
        cerr << "Invalid number of operands" << endl;
        return 1;
    }

    int n1 = 0;
    int n2 = 0;

    stringstream ss; 
    ss << argv[1];      
    ss >> n1;   
    ss.clear();
    ss << argv[2];  
    ss >> n2;

    int sum = n1 + n2;  

    return 0;
}