Ошибок в условиях допускается великое множество. Можно взять для примера любой пост из блога [PVS-studio][1], в каждом есть ошибки, связанные с невнимательным обращением с условиями. И правда, нелегко разглядеть ошибку в условии, если код выглядит так (пример из [этого поста][2]): 
 
    static int ParseNumber(const char* tx)
    {
      ....
      else if (strlen(tx) >= 4 && (strncmp(tx, "%eps", 4) == 0
        || strncmp(tx, "+%pi", 4) == 0 || strncmp(tx, "-%pi", 4) == 0
        || strncmp(tx, "+Inf", 4) == 0 || strncmp(tx, "-Inf", 4) == 0
        || strncmp(tx, "+Nan", 4) == 0 || strncmp(tx, "-Nan", 4) == 0
        || strncmp(tx, "%nan", 4) == 0 || strncmp(tx, "%inf", 4) == 0
              ))
      {
          return 4;
      }
      else if (strlen(tx) >= 3
        && (strncmp(tx, "+%e", 3) == 0
         || strncmp(tx, "-%e", 3) == 0
         || strncmp(tx, "%pi", 3) == 0   // <=
         || strncmp(tx, "Nan", 3) == 0
         || strncmp(tx, "Inf", 3) == 0
         || strncmp(tx, "%pi", 3) == 0)) // <=
      {
          return 3;
      }
      ....
    } 
[Читать дальше →][3]
  [1]: 
https://habrahabr.ru/company/pvs-studio/
  [2]: 
https://habrahabr.ru/company/pvs-studio/blog/331638/
  [3]: 
https://habrahabr.ru/post/332060/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut