【发布时间】:2018-10-08 06:07:08
【问题描述】:
我暂时限制了这段代码,只是为了做一些基本的计算,比如加法和减法,以便了解getopt 的工作原理。
我想要实现的是:./a.out -a 20 20 -s 40 40 [result = 40 和 0]
我是 C 新手,请告诉我代码中的错误。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int main(int argc, char *argv[]) {
FILE *file1 = fopen("Results.txt", "a");
char ch;
int res;
while ((ch = getopt(argc, argv, "a:s:")) != EOF)
switch (ch) {
case 'a':
res = add(atoi(optarg), atoi(argv[3]));
fprintf(file1, "%i\n", res);
break;
case 's':
res = subtract(atoi(optarg), atoi(argv[3]));
printf("%i \n", res);
fprintf(file1, "%i\n", res);
break;
default:
fprintf(stderr, "No such option");
return 1;
}
argc -= optind;
argv += optind;
printf("Opind = %i, argc = %i, argv = %i \n", optind, argc, argv);
fprintf(file1, "\nWritten to file\n");
fclose(file1);
return 0;
}
【问题讨论】:
-
您可以添加更多选项,但 AFAIK 您不能为一个选项添加更多值。
./a.out -a 20 -a 20 -s 40 -s 40呢? -
虽然不起作用,但它返回了相同的值,有什么建议的增强功能吗?
-
需要单独处理wach发生,解析后执行操作。对于加/减,最好不要使用 getopt 而是自己解析。
-
我会在下次使用 getopt 时研究它,我对它很陌生,所以我试图弄清楚它的工作原理。谢谢你的建议:)
-
您可以使用和递增
optind(有关更多详细信息,请参阅@charlie 的答案),但您不应该这样做。这是一种非常罕见的选项用法,会打扰任何用户。长话短说:您在这里使用了错误的工具。