带有命令行选项的C程序

时间:2012-06-01 04:46:42

标签: c ubuntu terminal

我想知道如何编写一个带有可以被终端调用的选项的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 Person.c -o Person

问题:
我想通过终端到达我的节目选项 示例:

./Person -f

输出:名字

7 个答案:

答案 0 :(得分:7)

void main ()错了,如果你从一本书中复制了这本书,就把书扔掉

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

答案 1 :(得分:2)

使用这些输入调用main:

int main(int argc,char ** argv)

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

答案 2 :(得分:2)

这是我的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”是程序本身的名称)。这很重要,因为尝试读取你没有的参数(“试图读取数组的末尾”)可能会导致崩溃;)

'希望有所帮助!

答案 3 :(得分:1)

请将您的主要原型更改为

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

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

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

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

答案 4 :(得分:1)

你必须告诉C你给它选择

int main(int argc, char **argv)

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

那么./Person -f

你需要告诉它

if (strncmp(argv[i],"-f",1) == 0) {

答案 5 :(得分:1)

correct form for a main function是:

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
}

答案 6 :(得分:1)

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