#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <string.h>
int main(int argc, char **argv) {
int o;
int a;
int b = 1;
while ((o = getopt(argc, argv, "a:b")) != -1) {
switch (o) {
case 'a' :
a = atoi(optarg);
break;
case 'b' :
b = 0;
break;
default :
printf("Error\n");
exit(1);
}
}
if(optind != 2) {
int c;
while((c = getchar()) != EOF) {
putchar(c);
}
}
}
假设这是合法的:
$ gcc -Wall fileAbove.c
$ ./a.out -a14 -b hi
$ ./a.out -a14 hi
$ ./a.out -b hi
以上所有内容都是合法的。如何找到标准输出?
$ echo hello | ./a.out -a14 -b
hello
$ echo hello | ./a.out -a14
hello
就像我怎么知道没有&#34; ./ a.out -a10 -b(这部分)&#34;,如果我们没有处理标准输出那部分。
答案 0 :(得分:0)
原因是这个if语句:
if(optind != 2) { ... }
如果你只使用arg optind
或 arg -a
(而不是两者), -b
将完全为2,因为那样你就拥有了一个参数,一旦你读了它,下一个opt索引是2.那么你的if条件是假的。