我正在为一个类设计一个程序,其中一条指令是使用命令行输入。例如,当您运行main -n 5 3
它时,它正在接受5
并3
作为参数。是什么-n
?
如何在带有代码块而不是 linux 机器的 PC 上进行测试?
我的程序将如何读取这些内容?
我是否需要将我的文件命名为 main ,然后在 main 中有两个参数可以适当地传入?
我正在为一个类设计一个程序,其中一条指令是使用命令行输入。例如,当您运行main -n 5 3
它时,它正在接受5
并3
作为参数。是什么-n
?
如何在带有代码块而不是 linux 机器的 PC 上进行测试?
我的程序将如何读取这些内容?
我是否需要将我的文件命名为 main ,然后在 main 中有两个参数可以适当地传入?
您main
程序中的函数具有原型
int main (int argc, char ** argv);
Whereargc
将包含传递的参数的数量,并且是指向包含您的参数argv
的数组的指针,该数组包含以空字符结尾的字符串。char*
通常argv[0]
包含您的程序名称、argv[1]
您的第一个参数等。在您的情况下,当您使用-n 5 3
您将拥有的参数运行程序时
argv[1] = "-n"
argv[2] = "5"
argv[3] = "3"
正如其他人指出的那样,参数在 argv[...] 中。在现实世界中,许多人使用getopt之类的东西来解析参数,因为它非常健壮并且已经过测试。
通常 C 使用 argc 和 argv 来允许您索引从命令行传递的参数。我已经有一段时间没有在 PC 上工作了,但是当我这样做时,代码与 Unix 一致。
#include <stdio.h>
int main (int argc, char *argv[]) {
printf("Total args count=%s\n", argc);
printf("Command=%s\n", argv[0]);
for (i=1; i< argc; i++) {
printf("\narg%d=%s", i, argv[i]);
}
printf("\n");
return 0;
}
这将返回
Total Args 4
Command main
1 = -n
2 = 5
3 = 3
a.exe -n 5 3
导致以下内容argv
:
argv[0]
= a.exe
argv[1]
= -n
argv[2]
= 5
argv[3]
= 3
argv[4]
=NULL
并且argc
将是4
。
在 linux 上,有一个getopt
函数unistd.h
可以帮助您检索n
选项并解析后面的参数。但是,如果您的程序只需要从后面-n
的两个参数中查找并读取值,您可以这样做:
int i, x = 0, y = 0;
for (i = 0; i < argc; i++) {
if (strcmp(argv[i], "-n") == 0 && i + 2 < argc) {
x = atoi(argv[i+1]);
y = atoi(argv[i+2]);
}
}