Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么我的getopt永远不会进入默认情况?_C - Fatal编程技术网

C 为什么我的getopt永远不会进入默认情况?

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

我正在使用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){   //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并存在循环