在单个IF语句中测试多个布尔值

时间:2019-05-16 12:05:34

标签: c++ if-statement boolean

我是一名新手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 **

   }

2 个答案:

答案 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
}

但是我认为最好还是忽略过时的参数而不显示错误,而您仍然可以仅使用opt1opt2来运行进程。这可能会导致我们找到更简单的代码:

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的解决方案(第一个解决方案)相同