我想知道如何编写一个带有可以被终端调用的选项的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
输出:名字
答案 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)
你还应该看看那里的一些解析库。许多人编写了很好的库来解析命令行选项,这样您就不必重复验证选项的所有工作。大多数都很容易使用。