C-读取命令行参数

C-读取命令行参数,c,C,我做了一个小程序来计算π(π)作为积分。现在我面临一个问题,如何扩展它来计算积分,在启动应用程序时,积分将作为额外参数给出。如何在程序中处理此类参数?编写主函数时,通常会看到以下两种定义之一: int main(无效) int main(int argc,char**argv) 第二种形式允许您访问传递给程序的命令行参数,以及指定的参数数量(参数之间用空格分隔) main的参数有: int argc-运行程序时传入程序的参数数。它至少是1 char**argv-这是指向-char*的指针。

我做了一个小程序来计算π(π)作为积分。现在我面临一个问题,如何扩展它来计算积分,在启动应用程序时,积分将作为额外参数给出。如何在程序中处理此类参数?

编写主函数时,通常会看到以下两种定义之一:

  • int main(无效)
  • int main(int argc,char**argv)
第二种形式允许您访问传递给程序的命令行参数,以及指定的参数数量(参数之间用空格分隔)

main
的参数有:

  • int argc
    -运行程序时传入程序的参数数。它至少是
    1
  • char**argv
    -这是指向-
    char*
    的指针。它也可以是这样的:
    char*argv[]
    ,意思是“char*的数组”。这是一个C风格的字符串指针数组

基本示例 例如,您可以这样做来打印传递给C程序的参数:

#include <stdio.h>

int main(int argc, char **argv)
{
    for (int i = 0; i < argc; ++i)
    {
        printf("argv[%d]: %s\n", i, argv[i]);
    }
}
现在运行它

[birryree@lilun c_code]$ ./a.out hello there
argv[0]: ./a.out
argv[1]: hello
argv[2]: there
因此,您可以在
argv
中看到,
argv[0]
是您运行的程序的名称(这不是标准定义的行为,但很常见。您的参数从
argv[1]
开始

所以基本上,如果你想要一个参数,你可以说

/myprogram integral


给你一个简单的例子 您可以检查
argv[1]
是否为
integral
,可能类似于
strcmp(“integral”,argv[1])==0

所以在你的代码中

#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    if (argc < 2) // no arguments were passed
    {
        // do something
    }

    if (strcmp("integral", argv[1]) == 0)
    {
        runIntegral(...); //or something
    }
    else
    {
        // do something else.
    }
}
#包括
#包括
int main(int argc,字符**argv)
{
if(argc<2)//未传递任何参数
{
//做点什么
}
if(strcmp(“整数”,argv[1])==0)
{
runIntegral(…);//或者别的什么
}
其他的
{
//做点别的。
}
}

更好的命令行解析 当然,这些都是非常基本的,随着程序变得越来越复杂,您可能需要更高级的命令行处理。为此,您可以使用一个库,如 #包括 int main(int argc,字符**argv){ int i,参数=0; 如果(argc>=2){ /*使用的命令行中有1个(或多个)参数*/ /*argv[0]可能指向程序名*/ /*argv[1]指向第一个参数*/ /*argv[argc]为空*/ 参数=atoi(argv[1]);/*最好使用strtol*/ 如果(参数>0){ 对于(i=0;i只要您需要处理的参数数量不太多,以上述答案中解释的原始方式解析命令行参数是合理的

我强烈建议您使用industrial strength库来处理命令行参数

这将使您的代码更加专业

这样的C++库在下面的网站中是可用的。我在很多项目中使用过这个库,因此我可以自信地说,这是命令行参数解析中最简单有用的库之一。此外,由于它只是一个模板库,所以更容易导入到您的项目中。

C语言也有类似的库。

还有一个C标准内置库,用于获取命令行参数:getopt


您可以检查它或输入。

那么您的问题真的只是关于命令行参数吗?是的,然后我不知道如何在实际程序中处理它,如果我以字符形式读取,而不是将其转换为int进行计算?只是这是a不理解的部分(编辑标题以使其更合适)非常感谢,这是我可以依靠的,很好
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    if (argc < 2) // no arguments were passed
    {
        // do something
    }

    if (strcmp("integral", argv[1]) == 0)
    {
        runIntegral(...); //or something
    }
    else
    {
        // do something else.
    }
}
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv) {
  int i, parameter = 0;
  if (argc >= 2) {
    /* there is 1 parameter (or more) in the command line used */
    /* argv[0] may point to the program name */
    /* argv[1] points to the 1st parameter */
    /* argv[argc] is NULL */
    parameter = atoi(argv[1]); /* better to use strtol */
    if (parameter > 0) {
      for (i = 0; i < parameter; i++) printf("%d ", i);
    } else {
      fprintf(stderr, "Please use a positive integer.\n");
    }
  }
  return 0;
}