Тестирование нескольких логических значений в одном операторе IF - PullRequest
1 голос
/ 16 мая 2019

Я начинающий программист на 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 было бы хорошим способом проверить, являются ли определенные значения истинными / ложными.

Я искал в 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 ]

1 голос
/ 16 мая 2019

Хорошим решением было бы использование операндов ! и &&
!, обозначающих «не» (или в таком случае «не так»), тогда как && объединяет два разных логических сравнения (в таком случае, "логический тест 1" и "логический тест 2")

Вот пример, чтобы сделать это:

if((opt1 && opt2)&&(!(opt3||opt4||opt5))){
   /*
     Do something if opt1 and opt2 are true and others are false
   */
}

Это практически то же самое, что и решение @ Фареанора выше (первое решение)

1 голос
/ 16 мая 2019

Возможное исправление может быть (если я хорошо понял вашу проблему):

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
}

Надеюсь, это то, что вы искали.

...