fgets(input,sizeof(input),stdin);
if (strcmp(input, "quit") == 0){
exit(-1);
}
Si je tape quit, cela ne ferme pas le programme; Je me demande pourquoi c'est le cas.
Au fait, input
est déclaré en tant que char *input;
.
Trailer la nouvelle ligne dans votre entrée. Voir homme fgets . Testez "quit" + newline, par exemple:
fgets(input,sizeof(input),stdin);
if(strcmp(input, "quit\n") == 0){
exit(-1);
}
J'ai complètement manqué la dernière phrase, re char *input
. Selon l'architecture, input
sera long de 4 ou 8 octets. Donc, le code est effectivement
fgets(input, 8, stdin);
qui ne reflète pas la taille réelle de la mémoire, input
pointe sur. Cela pourrait "fonctionner" tant que l'entrée est plus courte que huit octets, mais tronquera l'entrée si elle est plus grande. De plus, vous obtiendrez le reste de l'entrée la prochaine fois que vous appelez fgets
.
Vous devez soit donner la taille réelle soit suivre les conseils de @ JonathanLeffler et déclarer un tableau de caractères à la place, par exemple.
char input[64];
fgets(input, sizeof(input), stdin);
ou
char *input = malloc(N);
fgets(input, N, stdin);
La fonction fgets
peut ajouter une nouvelle ligne à la fin de la chaîne lue. Vous devrez vérifier que:
size_t ln = strlen(input) - 1;
if (input[ln] == '\n')
input[ln] = '\0';
ou même
strtok(input, "\n");
Vous suggérons de coder ceci comme suit:
if(strstr(input, "quit") != NULL){
Raison: Cela résoudra le problème des personnes ajoutant des caractères supplémentaires (par exemple, un espace avant ou après le texte).