C++ 获得“第二个命令行参数”

Posted

技术标签:

【中文标题】C++ 获得“第二个命令行参数”【英文标题】:C++ getting a "second command-line parameter" 【发布时间】:2018-07-26 08:34:48 【问题描述】:

我正在从事一项符合以下标准的作业:

任务:

“完美”数是等于其除数之和的整数 (其中 1 被视为除数)。例如,6 是完美的,因为它 除数是 1、2 和 3,而 1 + 2 + 3 是 6。同样,28 是完美的,因为 它等于 1 + 2 + 4 + 7 + 14。 一个“相当好”的数字是一个整数,它的“坏”—— 它的除数之和与数字本身之间的差异 - 不是 大于指定值。例如,如果最大坏度设置为 3、小于100的“相当不错”的数字有12个:2、3、4、6、8、10、16、18, 20、28、32 和 64; 你的任务是编写一个 C++ 程序,非常好,它决定了 小于指定值的指定最大不良数。极限值 执行程序时将最大坏度指定为命令行参数。

第一个问题是这样问的:

首先编写一个程序,打印完美数(坏度 0),直到小于 10000,由一个空格分隔。例如相当好 100 应该打印 6 28。

我在这里做了什么:

#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char** argv) 

   int candidate = 0;
   int badness;
    for(int i=2; i<10000; i++)
     //Start for loop 1

        for (int j = 1; j<i; j++)
         //Start for loop 2
            if (i % j == 0)
            
                  candidate += j;

            


         //End for loop 2

        if(candidate %i ==0)
         //Start of if 1
        cout << i << endl;
         //End of if 1


            candidate = 0;


     // End of loop 1
    return 0;

但是第二个问题问的是:

扩展程序,以便可以将不良限制指定为第二个命令行参数。例如相当好 100 3 将打印 2 3 4 6 8 10 16 18 20 28 32 64。

问题是,如何接收“第二个命令行参数”以在我的代码中使用?

注意:如果有帮助的话,我们需要在 Unix 终端 (cygwin) 上针对自动标记系统测试我们的代码。

希望这是足够的信息,对不起,如果不是这一切都非常混乱, 谢谢。

【问题讨论】:

gnu.org/software/libc/manual/html_node/Getopt.html 解析命令行选项和/或参数,或者您可以使用 std::cin 设置参数。 您需要使用argcargv 参数。你的老师在给你作业之前没有告诉你这件事吗? argc 包含char* 数组argv 内的参数数量。因此,如果argc&gt;2,您可以使用argv[2] 访问您的额外参数。 argv[0] 始终存在并代表程序名称(通常是可执行文件的路径)。 这是很多细节只是为了询问命令行参数。 :) 可能重复***.com/questions/33813321/command-line-parameters-c 【参考方案1】:
#include <cstdlib>
#include <iostream>
#include <sstream>
#include <iomanip>

using namespace std;

int main(int argc, char** argv) 

    int n = 10000;
    int badnessLimit = 0;

    if (argc > 1) 
        istringstream nArg(argv[1]);
        if (!(nArg >> n) || !nArg.eof()) 
            cerr << "Invalid first argument\n";
            return 1;
        
    
    if (argc > 2) 
        istringstream badnessArg(argv[2]);
        if (!(badnessArg>> badnessLimit) || !badnessArg.eof()) 
            cerr << "Invalid second argument\n";
            return 2;
        
    
    cout << "           n = " << n << '\n';
    cout << "badnessLimit = " << badnessLimit << '\n';

    return 0;

https://wandbox.org/permlink/qGV2LdRnYxhU8Eh8

【讨论】:

以上是关于C++ 获得“第二个命令行参数”的主要内容,如果未能解决你的问题,请参考以下文章

sem_wait的范例

使用百分号 (%) 作为 CMD 参数被解释为变量

什么是命令行参数?本人是c++菜鸟

如何在C++中解析命令行参数

Python 获得命令行参数的方法

求 linux下 c++高手,命令行传参数的题,