L’instruction getopt switch ne frappe jamais le cas par défaut

J’ai essayé de chercher et je n’ai pas trouvé de doublon / question similaire.

Comment se fait-il que “défaut” ne se déclenche jamais dans ce cas? Travailler sur des devoirs précédents pour un cours en vue de l’automne, et j’ai un problème avec getopt () en C.

Voici les lignes particulières en question:

while ((c = getopt(argc, argv, "i:o:")) != -1) { switch (c) { case 'i': inFile = strdup(optarg); break; case 'o': outFile = strdup(optarg); break; default: usage(); //this prints the "usage" statement and exits cleanly. } } 

Mon problème est, comment appeler

 ./fastsort abcd 

ne pas imprimer l’utilisation et quitter?

Le code ci-dessous cherchera des options comme -i hello ou / et -o world

 while((c = getopt(argc, argv, "i:o:") != -1) 

Cependant, ce que vous exécutez est:

 ./fastsort abcd 

getopt(argc, argv, "i:o:") != -1 n’est pas satisfait car aucun des arguments passés, abcd n’est une option

Je l’ai compris et je me sens idiot:

Puisqu’il n’y a jamais d’arguments / indicateurs valides donnés, la boucle while ne s’exécute même pas. J’ai juste ajouté un petit chèque à l’avance, et ça a l’air de réparer les choses:

 //Check number of args if(argc < 5 || getopt(argc, argv, "i:o:") == -1){ usage(); } 

Edit: Je viens de me rendre compte que cela ne fonctionne pas encore. Maintenant, comme j'appelle getopt une fois de trop, il est en train de jeter l'un des arguments prématurément, donc de ne pas en définir correctement.

Ma nouvelle "solution" (bien qu'un peu bidon) est la suivante:

 -Initialize inFile and outFile to null -Do the while loop as in my original post -If inFile or outFile are still null, print usage 

Et il a passé tous les tests automatisés donnés.