您好我是C的新手,我正在尝试启动此实验,其中命令语法首先列出任何命令行标志,然后列出一个或多个文件名。
我无法组织我想要扫描输入参数并在标志和文件名之间区分它们。
我想过做一个循环来查看参数是标志还是文件名。但我不确定如何开始实施它。由于前4个参数可以是任何顺序的潜在标志,因此后面的任何内容都是文件名。但也可能没有给出标志,只能从文件名开始。我根本不知道如何将这个循环初始化以通过每个参数1到1.任何人都可以帮忙吗?
可能的命令行参数示例:
wc fcopy.c head.c (no flags given just file names)
wc -l -c -w -L fcopy.c head.c a.exe (flags given and multiple files)
wc -l -w -c -L fcopy.c (flags given and 1 file name)
答案 0 :(得分:2)
您可以使用getopt()
检查以下问题:
Parsing command-line arguments?
Handling command line options before and after an argument in C
Argument-parsing helpers for C/UNIX
Getopt shift optarg
答案 1 :(得分:2)
签出getopt
,它允许你解析命令行参数及其标志:
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main (int argc, char **argv)
{
int aflag = 0;
int bflag = 0;
char *cvalue = NULL;
int index;
int c;
opterr = 0;
while ( (c = getopt (argc, argv, "abc:")) != -1 )
switch (c) {
case 'a':
aflag = 1;
break;
case 'b':
bflag = 1;
break;
case 'c':
cvalue = optarg;
break;
case '?':
if (optopt == 'c')
fprintf (stderr, "Option -%c requires an argument.\n", optopt);
else if (isprint (optopt))
fprintf (stderr, "Unknown option `-%c'.\n", optopt);
else
fprintf (stderr,
"Unknown option character `\\x%x'.\n",
optopt);
return 1;
default:
abort ();
}
printf ("aflag = %d, bflag = %d, cvalue = %s\n",
aflag, bflag, cvalue);
for (index = optind; index < argc; index++)
printf ("Non-option argument %s\n", argv[index]);
return 0;
}
答案 2 :(得分:2)
逐个读取命令行参数非常简单:
int main( int argc, // Number of strings in array argv char *argv[])
C函数的两个基本参数是argc(int的args数)和argv(args的字符串数组)
第一个字符串始终是正在运行的程序的名称,之后是通过命令行传递的args。
if(argc > 1)
for( count = 1 count < argc; count++ )
printf("%s", argv[count]);
将在屏幕上显示通过调用程序名称传递的每个参数。 我假设您的标志以“ - ”作为第一个字符传递?如果是这样,你可以检查每个字符串中第一个字符的内容是否有' - '来判断它是否是一个标志。
答案 3 :(得分:0)