C 为什么我的getopt永远不会进入默认情况?
我正在使用get opt向程序中添加命令行参数-l和-s可以很好地工作,但是当我不传递任何参数时,它只是退出程序,而不是使用Library\u调用C 为什么我的getopt永远不会进入默认情况?,c,C,我正在使用get opt向程序中添加命令行参数-l和-s可以很好地工作,但是当我不传递任何参数时,它只是退出程序,而不是使用Library\u调用 int main(int argc, char* argv[]){ int flag = -1, choice; //Setting a flag variable to differenciate btw lib or sys call while((choice = getopt(argc, argv, "ls")) != -1
int main(int argc, char* argv[]){
int flag = -1, choice; //Setting a flag variable to differenciate btw lib or sys call
while((choice = getopt(argc, argv, "ls")) != -1){ //Reference from Geeks4Geeks:
switch(choice){ //https://www.geeksforgeeks.org/getopt-function-in-c-to-parse-command-line-arguments/
case 'l':
flag = Library_Call;
break;
case 's':
flag = System_Call;
break;
default:
flag = Library_Call;
}
}
这不是
getopt
的工作方式:default
案例用于未知选项,而不是不传递选项
如果要设置默认值,请在处理getopt
循环之前进行设置
从手册页面:
如果成功找到选项,则getopt()返回选项字符。如果已解析所有命令行选项,则getopt()返回-1。如果getopt()遇到opt字符串中不包含的选项字符,则返回“?”。如果getopt()遇到缺少参数的选项,则返回值取决于optstring中的第一个字符:如果是“:”,则返回“:”;否则返回“?”
因此,您也可以匹配“?”
,而不是默认的情况,但这与“无选项”不匹配。这就是工作原理。解析完所有输入参数后,返回-1
如果没有参数,就没有要解析的内容,因此它立即返回-1
,结束循环
要解决将变量设置为某个默认值的问题,请首先初始化变量:
int flag = Library_Call;
我假设当没有传递任何参数时,choice
变为-1并存在循环