解析多个参数行
Parsing Multiple Argument Line
我真的有麻烦了,我想像那些一样解析多个参数行:
./a.out -a 0 L
./a.out -ab
./a.out -abc
我尝试用 getopt 来做,但没有成功。事实是我无法处理
之类的多个参数
./a.out -abc
./a.out -edg
有什么方法可以按照我想要的方式使用 getopt 之类的函数吗?
或者我应该考虑这样做(使用 getopt):
./a.out -a -b
./a.out -a -b -c
"a::" 使 -a 带有可选参数。 -a 本身设置 options
标志以获得两个单独的参数。 -带有附加选项的 aopt 接受 opt
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int c = 0;
int each = 0;
int options = 0;
if ( !( argc == 2 || argc == 4)) {
fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
return 1;
}
while((c = getopt(argc, argv, "a::")) != -1) {
switch(c) {
case 'a':
if ( optarg) {// -aopt
printf ( "%s\n", optarg);
}
else {
options = 1;// -a by itself
}
break;
default:
fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
return 1;
}
}
if ( optind + 2 == argc) {
if ( options) {
for ( each = optind; each < argc; each++) {
if ( ( argv[each][0] != '-')) {
printf ( "found argument %s\n", argv[each]);
}
}
}
else {
fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
return 1;
}
}
return 0;
}
我真的有麻烦了,我想像那些一样解析多个参数行:
./a.out -a 0 L
./a.out -ab
./a.out -abc
我尝试用 getopt 来做,但没有成功。事实是我无法处理
之类的多个参数./a.out -abc
./a.out -edg
有什么方法可以按照我想要的方式使用 getopt 之类的函数吗?
或者我应该考虑这样做(使用 getopt):
./a.out -a -b
./a.out -a -b -c
"a::" 使 -a 带有可选参数。 -a 本身设置 options
标志以获得两个单独的参数。 -带有附加选项的 aopt 接受 opt
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int c = 0;
int each = 0;
int options = 0;
if ( !( argc == 2 || argc == 4)) {
fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
return 1;
}
while((c = getopt(argc, argv, "a::")) != -1) {
switch(c) {
case 'a':
if ( optarg) {// -aopt
printf ( "%s\n", optarg);
}
else {
options = 1;// -a by itself
}
break;
default:
fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
return 1;
}
}
if ( optind + 2 == argc) {
if ( options) {
for ( each = optind; each < argc; each++) {
if ( ( argv[each][0] != '-')) {
printf ( "found argument %s\n", argv[each]);
}
}
}
else {
fprintf(stderr, "Usage:\t%s -aopt\n or\n\t%s -a opt1 opt2\n", argv[0], argv[0]);
return 1;
}
}
return 0;
}