getopt винаги връща 1

Искам да използвам getopt, за да получа списъка с аргументи на моя конзолен инструмент. Когато извикам инструмента си, както е показано по-долу, getopt винаги връща 1 и не съвпада с switch/case.

Правя ли нещо нередно?

  mytool -f farg -d darg

  int 
  main(int argc, char** argv) {
  int c;
  while((c = getopt(argc, argv, "f:d:h") != -1)) {

      switch(c) {
        case'f':
        break;

        default:
        break;
      }
  }

person Abruzzo Forte e Gentile    schedule 10.03.2014    source източник


Отговори (1)


while((c = getopt(argc, argv, "f:d:h") != -1))

Работи като

c = (getopt(argc, argv, "f:d:h") != -1)

Е, това винаги е 1, защото резултатът от сравнението се съхранява в c. Във вашия случай getopt не връща -1. Ако върне -1, тогава c ще бъде 0. Поправката е

while((c = getopt(argc, argv, "f:d:h")) != -1)
person Sakthi Kumar    schedule 10.03.2014