你好我正在编写一个程序,它从c中的命令行中获取多个选项。这些是一些选择:
-l counts number of lines in file
-w counts words in file
-c counts characters in file
为了让它们有效,你可以这样做:
./program -l file.txt
./program -w file.txt
./program -c file.txt
但是我希望将它们组合在一起,以便多个选项仍然能够正常运行。 e.g:
./program -lwc file.txt
将计算行,单词和AND文件,
./program -lw file.txt
将计算行和单词,
./program -cl file.txt
将计算字符和行等。我只是想弄清楚如何做到这一点。这是我的参数代码:
while ( ( c = getopt( argc, argv, "c:w:l:" ) ) != -1 ) { /* get options */
switch ( c ) {
case 'c':
cflag = 1;
break;
case 'w':
wflag = 2;
break;
case 'l':
lflag = 3;
break;
}
}
它只是改变选项,但它仍然无法正常工作。使用我现在的代码,结合两个选项导致段故障。任何帮助表示赞赏
答案 0 :(得分:1)
:
格式的getopt
用于带参数的选项。删除它们。
答案 1 :(得分:1)
正如Jens Gustedt所说:从选项中删除冒号以使它们不参与争论。然后,当选项处理完成时(即getopt
返回-1
),检查optind
是否小于argc
,这意味着有一个额外的参数(您的文件名) 。像这样:
/* after the while-loop */
if(optind < argc){
fileName = argv[optind];
optind++;
}else{
perror("No file specified");
return -1;
}
getopt
完成后,optind
指向argv
中未由getopt
处理的第一个条目。