gpt4 book ai didi

c - 在 C 中使用 argv 和 argc 解析命令行

转载 作者:太空宇宙 更新时间:2023-11-04 08:42:56 24 4
gpt4 key购买 nike

我正在尝试弄清楚如何从命令行获取命令以及在获取该命令时执行特定方法。我无法获得识别输入值的代码。有什么想法吗?

getopts、fgets 或任何类似的东西都不起作用。

int main(int argc, char *argv[]){
int i = 1;

while((argc > 1) && (argv[i] != "d")) {
switch (argv[i]) {
case: "a":
callMethodA(atoi(argv[i+1]));
break;
case: "b":
callMethodB(atoi(argv[i+1]));
break;
case: "c":
callMethodC(atoi(argv[i+1]));
break;
default:
printf("command not recognized");
}
argc++
i+=2;
}

假设发生的是说输入为:

a 3 5 1 b 2 1 c      4

它会调用参数 int 为 3 的函数 callMethodA(),所以

callMethodA(3);
callMethodA(5);
callMethodA(1);
callMethodB(2);
callMethodB(1);
callMethodC(4);

根据 PureW 的建议编辑

int i = 1;

while((argc > 1) && (strcmp(argv[i], "d") != 0)) {
if(strcmp(argv[i], "a")) callMethodA(atoi(argv[i+1]));
else if(strcmp(argv[i], "b")) callMethodB(atoi(argv[i+1]));
else if(strcmp(argv[i], "c")) callMethodC(atoi(argv[i+1]));

argc++;
i+=2;
}

命令的顺序或值的数量没有限制

最佳答案

argv 是一个字符指针 vector 。所以每一个argv[i]其实就是一个内存地址。由于您正在比较内存位置,因此作为 argv[1] == "a" 进行常规比较将不起作用。

您要做的是使用 strcmp(argv[1], "a")http://www.cplusplus.com/reference/cstring/strcmp/

关于c - 在 C 中使用 argv 和 argc 解析命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22839032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com