0

我的代码当前读取两个参数,如果有人输入一个数字(例如 100),我需要添加一个检查以读取 1 个参数,如果输入 100,则读取第二个参数 3. 现在它每次都读取两个参数并给出一个如果输入一个参数,则会出错。

#include <iostream>
#include <cstring>

using namespace std;
int perfectnumber(int number)
{

   int sumofdivisor = 0;
   for (int i = 1; i < number; i++)
   {
       if (number % i == 0)  
       sumofdivisor += i;
   }

   return abs(sumofdivisor - number);
}

int main(int argc, char *argv[])
{
   int count = atoi(argv[2]); 
   int upper_limit = atoi(argv[1]);

   for (int start = 2; start <= upper_limit; start++)
    {
        int difference = perfectnumber(start);
        if (difference <= count)
        {
            cout << start << " ";
        }  
    }
    cout << endl;
}
4

2 回答 2

2

您可以使用argc来查看提供了多少参数。第一个参数是可执行文件的名称1,因此您必须与 进行比较3。这是一个简单的例子:

#include <iostream>
#include <cstdlib>


int main(int argc, char *argv[])
{
  if (argc < 3) {
    std::cerr << "Too few arguments\n";
    return EXIT_FAILURE;
  }
  std::cout << "Args: " << argv[1] << " and " << argv[2] << '\n';
}

1 这并不完全正确。根据参考:“是指向以空字符结尾的多字节字符串的初始字符的指针,该字符串表示用于调用程序本身的名称(如果执行环境不支持,则为argv[0]空字符串)。” ""但正如评论指出的那样,这也不完全准确。这是实现通常遵循但可以不遵循的约定。

于 2019-08-16T06:40:10.410 回答
2

参数argc是你的朋友,它告诉你有多少个参数。

这是一个如何使用 argc 的示例。

#include "stdio.h"
int main(int argc, char* argv[])
{

    printf("Number: %d\n", argc);
    printf("0: %s\n", argv[0]);
    if (1<argc)
    {
        printf("1: %s\n", argv[1]);
    }
}
于 2019-08-16T06:22:27.810 回答