getopt switch语句从不命中默认情况

时间:2014-06-24 01:26:35

标签: c command-line-arguments getopt

我尝试过搜索,但未发现重复/类似问题。

为什么"默认"在这种情况下永远不会触发?为一门课程做一些以前的家庭作业,为秋天做准备,我在C中遇到了getopt()的问题。

以下是有问题的特定行:

while ((c = getopt(argc, argv, "i:o:")) != -1) {
        switch (c) {
            case 'i':
            inFile = strdup(optarg);
            break;

            case 'o':
            outFile = strdup(optarg);
            break;

            default:
            usage(); //this prints the "usage" statement and exits cleanly.
        }
    }

我的问题是,如何调用

./fastsort a b c d

不打印使用情况并退出?

2 个答案:

答案 0 :(得分:2)

我想通了,感觉自己像个白痴:

由于永远不会给出任何有效的参数/标志,因此while循环甚至不执行。我事先添加了一点检查,似乎解决了问题:

//Check number of args
if(argc < 5 || getopt(argc, argv, "i:o:") == -1){
    usage();
}

编辑:刚刚意识到它还没有完成。现在,因为我过早地调用了getopt,它过早地抛弃了其中一个args,因此没有正确设置正确的。

我的新“解决方案”(尽管有点苛刻)是:

-Initialize inFile and outFile to null
-Do the while loop as in my original post
-If inFile or outFile are still null, print usage

它通过了所有自动化测试。

答案 1 :(得分:1)

以下代码将搜索-i hello或/和-o world

等选项
while((c = getopt(argc, argv, "i:o:") != -1)

但是你正在执行的是:

./fastsort a b c d

其中getopt(argc, argv, "i:o:") != -1不满意,因为传递的参数a b c d都不是一个选项