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
où 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.