我尝试过搜索,但未发现重复/类似问题。
为什么"默认"在这种情况下永远不会触发?为一门课程做一些以前的家庭作业,为秋天做准备,我在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
不打印使用情况并退出?
答案 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
都不是一个选项