【问题标题】:Calculating two numbers from command line c++从命令行c ++计算两个数字
【发布时间】:2011-02-25 01:41:42
【问题描述】:

这是我的代码:

#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”吗?这个程序不会计算那种数字。帮忙?

谢谢

【问题讨论】:

  • 您想只使用 STL 还是也可以使用 Boost,例如? ...
  • 听起来很像家庭作业问题
  • 请每行缩进 4 个空格。 STL 或升压;好笑。
  • 添加后应该怎么做?将它们打印到屏幕上?为什么以上对你不起作用?请尝试在您的问题中包含尽可能多的信息。
  • @Tom:那又怎样? OP显然已经尝试并遇到了困难,所以我们帮助了他。这不像是他要求我们做他的硬件

标签: c++ command-line-arguments


【解决方案1】:

参数总是作为字符串传递。首先,将主函数声明改为

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

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

第二次使用atoiargv[1]argv[2] 转换为整数,在我看来,这有点C-ish,虽然是最简单的,或者boost::lexical_cast

例如

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

【讨论】:

    【解决方案2】:

    是的——你想要atoi()

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

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

    【讨论】:

    • 谢谢。是的,这有帮助。我还有 1 个问题,拜托。如果我想输入“1.20”作为我的号码怎么办?当我的论点是 char 时,如何使用浮点数?
    【解决方案3】:

    argv[1]argv[2] 是字符串。求和时,用atoi() 调用将它们包装起来,以便对其进行解析并转换为整数。

    感谢 Mark Loeser 和walkingTarget

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

    int main(int argc, char **argv)
    

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

    main() 应该always返回一个intargv应该always是一个字符串数组。

    【讨论】:

    • 他在他的示例中错误地将 argv 定义为 int,顺便说一句。我相信它应该是 char* argv[]。
    • 他对main() 的整个声明是错误的。 main() 绝不是空虚 :)
    • 哎呀,我错过了。谢谢,我会把它添加到我的答案中。
    • 我在哪里可以学习解析为 double/float ?因为,如果我输入 2.4 和 5.4 作为我的数字呢?
    • 使用atof() 而不是atoi()atof() 会将字符串解析为双精度并返回双精度。
    【解决方案4】:

    正如其他答案中所建议的,您首先需要更改函数声明 main - argc 表示传递给它的参数总数,argv 本身就是一个参数数组(每个参数都是数组中的一个元素; 第一个元素 - 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;
    }
    

    【讨论】:

    • 因给出完整答案而对学习者没有指导性而被否决。
    • 我正在编辑答案/添加解释,同时被下注。我个人很欣赏更多带有解释的代码,所以总的来说我同意你的看法
    猜你喜欢
    • 2020-07-11
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 2016-12-15
    相关资源
    最近更新 更多