Partage
  • Partager sur Facebook
  • Partager sur Twitter

boucle d'arret avec chaine de caracteres

Sujet résolu
    16 novembre 2017 à 22:03:54

    Bonjour à tous, 

    Je me débrouille un petit peu en C et j'ai un problème. En effet, je voudrais que ma boucle s'arrête lorsque la chaine de caractères est le mot "FIN". Cependant, j'ai remarqué que lorsque le mot que j'entre en stin est FIN, strcmp me sort 10 et non pas 0. Et donc pour sortir de la boucle, je suis obligée d'écrire arret != 10.

    Voici l'ensemble de mon code :

      int i = 1, arret = 1;
      char cmdLinux[20];
      char fin[4] = "FIN";
    
      /* tq le FIN n'est pas ecrit */
      while (arret != 0) {
        printf("Quelle commande Linux souhaitez-vous executer? \n");
        memset(cmdLinux, '\0', sizeof(cmdLinux) ); /*vide cmdLinux*/
        fgets(cmdLinux, sizeof(cmdLinux), stdin);
    
        arret = strcmp(cmdLinux,fin);
        printf("%d\n", arret);
    
      }
    

    Merci de votre aide ! 

    -
    Edité par SosoVp 16 novembre 2017 à 22:04:48

    • Partager sur Facebook
    • Partager sur Twitter
      16 novembre 2017 à 23:04:00

      Je détaille ce que j'ai fait pour que tu comprennes qu'on trouve une erreur en étant méthodique, pas en lisant le code (comme on pourrait le croire si je donnais la solution) (car à première vue, pour moi il a l'air tout à fait correct).

      J'ai essayé le programme, effectivement avec "FIN" ça donne 10. Avec "fin" ça donne 32. Avec "stop" ça donne 45. Ça prouve que la chaîne 'cmdLinux' passée dans la fonction 'strcmp' n'est pas celle que tu crois.

      Mais alors quelle chaîne est passée dans cette fonction ? Fais afficher la chaîne 'cmdLinux' après sa saisie (par exemple à la ligne 10, il y a de la place), tu verras (car je l'ai fait), ce n'est pas tout à fait ce que tu croyais. Je ne t'en dis pas plus...

      Une fois que tu auras compris ce qui s'est passé, tu sauras corriger l'erreur (je l'ai fait, maintenant ça marche).

      (Moralité : en cas d'erreur, il faut 1° localiser l'erreur en affichant le contenu des variables, 2° comprendre l'erreur, et il ne reste plus que 3° corriger.)

      -
      Edité par robun 16 novembre 2017 à 23:08:19

      • Partager sur Facebook
      • Partager sur Twitter
        22 novembre 2017 à 17:52:02

        Désolée de ne regarder que maintenant ta réponse, j’etais malade. J’ai réussi, j’te remercie !!
        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2017 à 1:48:07

          (Pour info, ce que j'avais fait était très simple : ayant constaté que la chaîne saisie gardait le \n final, j'avais remplacé la chaîne constante "FIN" par "FIN\n".)

          • Partager sur Facebook
          • Partager sur Twitter

          boucle d'arret avec chaine de caracteres

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown