我做了很少的程序来计算pi(π)作为一个整体。现在我面临一个问题如何扩展它以计算积分,这将在启动应用程序时作为额外参数给出。我如何在程序中处理这样的参数?
答案 0 :(得分:45)
编写main函数时,通常会看到以下两种定义之一:
int main(void)
int main(int argc, char **argv)
第二种形式允许您访问传递给程序的命令行参数,以及指定的参数数量(参数由空格分隔)。
main
的论据是:
int argc
- 运行时传递给程序的参数数量。它至少是1
。char **argv
- 这是指向char *
的指针。也可以是:char *argv[]
,表示'{1}}'数组。这是一个C样式字符串指针数组。例如,您可以执行此操作来打印传递给C程序的参数:
char *
我正在使用GCC 4.5编译一个名为#include <stdio.h>
int main(int argc, char **argv)
{
for (int i = 0; i < argc; ++i)
{
printf("argv[%d]: %s\n", i, argv[i]);
}
}
的文件。它将编译并构建一个默认的args.c
可执行文件。
a.out
现在运行它......
[birryree@lilun c_code]$ gcc -std=c99 args.c
所以你可以看到在[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
当然,这一切都非常简陋,随着您的程序变得越来越复杂,您可能需要更高级的命令行处理。为此,您可以使用GNU getopt
等库。
答案 1 :(得分:2)
#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;
}
答案 2 :(得分:2)
只要您需要处理的参数数量不是太多,就可以合理地解析上述答案中解释的原始方式的命令行参数。
我强烈建议您使用工业强度库来处理命令行参数。
这将使您的代码更专业。
以下网站提供了这样的C ++库。我在我的许多项目中都使用过这个库,因此我可以自信地说这是一个最简单但最有用的命令行参数解析库。此外,由于它只是一个模板库,因此可以更轻松地导入到项目中。 http://tclap.sourceforge.net/
C也可以使用类似的库。 http://argtable.sourceforge.net/
答案 3 :(得分:1)
还有一个C标准内置库来获取命令行参数:getopt