3

我想知道如何编写一个带有可以由终端调用的选项的 C 程序。
示例:Person.c

#include <stdio.h>
void main ()
{
     char option;

     if(option == 'f') printf("First Name");
     else if(option == 'l') printf("Last Name");
     else printf("Full Name");
}  

编译它

cc 个人.c -o 个人

目标:
我想通过终端访问我的程序选项。
例子 :

./Person -f

输出:名字

4

7 回答 7

10

void main ()错了,如果你是从书上抄来的,就把书扔掉

应该是int main(int argc, char **argv),然后将 argc 设置为参数的数量,并且 argv[1] .... argv[argc-1] 是参数字符串(argv[0] 是程序的名称)

于 2012-06-01T04:50:49.133 回答
4

这是我的 0.02 美元:

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

int 
main (int argc, char *argv[])
{

     if (argc != 2) {
       printf ("USAGE: ./Person [-f|-l]\n");
       return 1;
     }
     if (strcmp (argv[1], "-f") == 0) {
       printf("First Name");
     }
     else if (strcmp (argv[1], "-l") == 0)
       printf("Last Name");
     }
     else {
       printf ("Unknown argument\n");
       return 1;
     }
     return 0;
}

要点:

1) 在 C 中,你不能只比较字符串(比如 "aaa" == "bbb")。您需要特殊的库函数,例如“strcmp()”(“比较字符串”)。

2) 为了使用库函数,您需要#include 头文件(如“stdio.h”,用于“printf()”,或“string.h”,用于“strcmp()”)。你可以通过使用“man”来找出你需要的标题......或者只是谷歌搜索相关的调用(“google strcmp”应该给你与“man strcmp”相同的结果)

3) 使用程序返回值来表示“成功”或“失败”是一个很好的通用约定。按照惯例,“0”通常表示“成功”。

4) 最后,为了您的目的,必须使用“argc”和“argv”来访问您的命令行参数。

5) 顶部的“if (argc != 2)”确保您输入了至少一个命令行参数(参数“0”是程序本身的名称)。这很重要,因为尝试读取您没有的参数(“尝试读取数组的末尾”)可能会导致崩溃;)

'希望有帮助!

于 2012-06-01T04:56:48.897 回答
3

使用以下输入调用 main:

int main (int argc, char **argv)

argc 是 args 的数量,而 argv 是命令行参数的数组。注意 argv 的第一个参数是程序名。

于 2012-06-01T04:51:44.560 回答
2

请将您的主要原型更改为

int main(int argc, char *argv[])

您在问题中提出的选项可以使用上面给出的主函数的输入参数传递。

argc 参数告诉您有多少输入已通过终端传递,而 argv 将为您提供每个输入作为 char * 数组。请注意,默认情况下,第一个输入 (argv[0]) 将是带有完整路径的可执行文件的文件名,其余输入将跟随它。

http://www.cprogramming.com/tutorial/c/lesson14.html - 本教程也会有所帮助。

于 2012-06-01T04:50:36.190 回答
2

你必须告诉 C 你给它选择权

int main(int argc, char **argv)

argc 是参数的数量,而 argv 是您调用的参数

那么 ./Person -f

你需要告诉它

if (strncmp(argv[i],"-f",1) == 0) {
于 2012-06-01T04:50:39.787 回答
2

函数正确形式main是:

int main(int argc, char **argv) {

}

然后argv保存你的命令行参数:

int main(int argc, char **argv) {
    for(int i = 0; i < argc; ++i) {
        printf("arg %d is %s", i, argv[i]);
    }
    return 0; // indicates that the program completed successfully
}
于 2012-06-01T04:51:18.923 回答
2

您还应该查看那里的一些解析库。许多人为解析命令行选项编写了很棒的库,这样您就不必重复验证选项的所有工作。大多数也很容易使用。

于 2012-06-01T04:53:01.170 回答