我是一名新手C ++程序员,试图测试传递给程序的参数/参数。
可以将多个参数传递给程序,但是我想测试一下,如果传递了某些参数,则其他参数变为无效。
例如PGM接受arg(1)arg(2)arg(3)arg(4)arg(5)等...
如果提供了arg(1)和arg(2),则arg(3),arg(4)和arg(5)等无效,并且如果还提供了程序,则该程序应以错误消息终止以及arg(1)和arg(2)。
我认为使用布尔IF测试是检查某些值是否为true / false的好方法。
我在stackoverflow上进行了搜索,但没有找到一个包含我所要尝试的答案。如果有人可以指出正确的方向或提出更有效的方法,我将不胜感激。
我的代码当前如下所示:
bool opt1 = false;
bool opt2 = false;
bool opt3 = false;
bool opt4 = false;
bool opt5 = false;
for(int i=1; i<argc; i++) {
char *str = argv[i];
if (strcmp (str, "-opt1:")==0) {opt1 = true;}
else if (strcmp (str, "-opt2:")==0) {opt2 = true;}
else if (strcmp (str, "-opt3:")==0) {opt3 = true;}
else if (strcmp (str, "-opt4:")==0) {opt4 = true;}
else if (strcmp (str, "-opt5:")==0) {opt5 = true;}
}
if((opt1) && (opt2) && (~(opt3)) && (~(opt4)) && (~(opt5)) {
** DO SOMETHING **
} else {
** DISPLAY ERROR MESSAGE AND USAGE TEXT **
}
答案 0 :(得分:1)
可能的修复方法是(如果我对您的问题很了解):
if(opt1 && opt2) // opt3, opt4 and opt5 are invalid
{
if(!(opt3 || opt4 || opt5))
{
// Do something
}
else
{
// Display error message because at least opt3 or opt4 or opt5 is provided and not requested
}
}
else // opt3, opt4 and opt5 are valid
{
// Do something
}
但是我认为最好还是忽略过时的参数而不显示错误,而您仍然可以仅使用opt1
和opt2
来运行进程。这可能会导致我们找到更简单的代码:
if(opt1 && opt2)
{
// Do something without using opt3, opt4 and opt5
}
else
{
// Do something taking into account opt3, opt4 and opt5
}
我希望这是您想要的。
答案 1 :(得分:1)
一个好的解决方案是使用操作数!
和&&
!
表示“不”(或在这种情况下为“不正确”),而&&
组合了两个不同的逻辑比较(在这种情况下为“逻辑测试1”和“逻辑测试2”)
这是一个示例:
if((opt1 && opt2)&&(!(opt3||opt4||opt5))){
/*
Do something if opt1 and opt2 are true and others are false
*/
}
这实际上与上面@Fareanor的解决方案(第一个解决方案)相同