Partage
  • Partager sur Facebook
  • Partager sur Twitter

2 résultat pour 1 même condition

Clause If et 2 résultats

    30 août 2021 à 19:47:54

    Bonjour tout le monde,

    Je débute en programmation C et en bon débutant je suis déjà bloqué sur un petit problème...

    En effet, je me demande si il est possible lorsque l'on pose une condition IF d'avoir 2 résultats pour la même condition. J'ai un peu cherché mais je n'ai pas trouvé de réponses....

    Dans mon cas je voudrais faire en sorte d'afficher un texte et de donner une nouvelle valeur à une variable lorsque qu'un joueur tape le nombre 0...

    Voilà voilà j'espère que ma question n'est pas trop bête...

    Et merci à l'âme charitable qui voudra bien me répondre.

    Bonne Journée/Soirée !

    C_pasFacile :) 

    if (nouvellePartie =1)
      printf("OK, C'est parti \n");
      else if (nouvellePartie =0)
      printf("D'accord on arrete \n") ;
       continuerPartie=0;
    
      else
        printf("BOn dans le doute on continue... \n");



    • Partager sur Facebook
    • Partager sur Twitter
      30 août 2021 à 20:13:45

      Hello,

      Pour comparer une égalité, c'est == , pas = qui est une assignation

      -
      Edité par edgarjacobs 30 août 2021 à 20:14:23

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        30 août 2021 à 21:57:50

        Merci edgarjacobs !  C'est très gentil d'avoir répondu !

        • Partager sur Facebook
        • Partager sur Twitter
          30 août 2021 à 22:33:47

          Bonjour,

          rajoute les options de compilations -Wall -Wextra (si tu as gcc/clang) pour avoir des warnings pour t'indiquer ce genre d'oubli.

          $ cat t.c
          #include <stdio.h>
          
          int main(void)
          {
          	int a=42;
          
          	if (a=10) {
          		puts("a vaut 10 !");
          	} else {
          		puts("a ne vaut pas 10");
          	}
          
          	return 0;
          }
          $ gcc -Wall -Wextra -g -o t t.c
          t.c: In function ‘main’:
          t.c:7:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses]
              7 |         if (a=10) {
                |             ^
          $ 
          
          • Partager sur Facebook
          • Partager sur Twitter
            31 août 2021 à 1:42:48

            Tu as "une" condition, mais tu as "deux" résultats.
            Ou bien la condition est vérifié (premier résultat), ou bien elle ne l'est pas (deuxième résultat).
            Si elle est vérifiée, tu fais une chose,
            Sinon, tu fais autre chose ou rien du tout.
            Et cette autre chose peut être un autre test qui va t'amener deux résultats également.
            ...
            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              31 août 2021 à 6:51:40

              L'instruction if peut prendre deux formes :

              • La plus générale 
              if (une_condition) une_action else une_autre_action ;
              • Une forme simplifiée 
              if (une_condition) une_action;

              Quand elle est exécutée :

              • La condition  est évaluée 
              • Si elle est vraie la première action est exécutée 
              • Sinon  c'est l'autre qui est exécutée (rien dans la forme simplifiée)
              • Et on passe à la suite.

              En C, quand une action comporte plusieurs instructions, il faut mettre des accolades pour en faire un bloc, 

              if (nouvelle_partie == 12) {
                  printf(...);
                  continuer = ...;
              }

              Il semble que ca manque dans ton code.

              Attention : en C, c'est les accolades qui marquent la structuration en blocs. Pas l'indentation (décalage vers la droite) à la différence de Python.

              En C, techniquement l'indentation n'a pas de signification. C'est un  langage context-free, en format libre. Mais il faut quand même la faire, sinon le code est illisible.

              Du reste c'est grâce à l'indentation qu'on voit que tu voulais probablement faire un bloc lignes 4 et 5.

              Pour en revenir aux accolades, il est plutôt conseillé d'en mettre aussi pour les actions qui n'ont qu'une seule instruction.

              if (nouvelle_partie == 0) {
                 printf("ok\n");
              }

              Ça fait apparaître plus clairement la subordination de l'action et de la condition.

              On s'en dispense quand le else contient un if, exemple dans une cascade de tests 

              if (truc) {
                 ....
              } else if (machin) {
                 ...
              } else if (bidule) {
                ...
              } else {
                ...
              }




              -
              Edité par michelbillaud 31 août 2021 à 7:03:57

              • Partager sur Facebook
              • Partager sur Twitter
                31 août 2021 à 17:38:58

                Bonjour White Crow,

                Merci pour le conseil. Je vais me renseigner pour faire cela sur Code Blocks.

                Cela m'évitera de vous embêter trop souvent. :D

                =======

                Bonjour Michel,

                Merci pour ta réponse très complète. 

                OK j'avais pas saisi la nécessité de l'accolade lorsqu'il y a plusieurs instructions.

                Effectivement cela semble être un bon moyen de distinguer l'action de la condition.

                En tout cas un grand merci pour vos réponses. 

                C'est super sympa de se sentir accueilli de la sorte par la communauté.

                Bonne journée à tous.

                White Crow a écrit:

                Bonjour,

                rajoute les options de compilations -Wall -Wextra (si tu as gcc/clang) pour avoir des warnings pour t'indiquer ce genre d'oubli.

                $ cat t.c #include <stdio.h> int main(void) { int a=42; if (a=10) { puts("a vaut 10 !"); } else { puts("a ne vaut pas 10"); } return 0; } $ gcc -Wall -Wextra -g -o t t.c t.c: In function ‘main’: t.c:7:13: warning: suggest parentheses around assignment used as truth value [-Wparentheses] 7 | if (a=10) { | ^ $ 


                -
                Edité par C_leDebut... 31 août 2021 à 17:44:24

                • Partager sur Facebook
                • Partager sur Twitter
                  31 août 2021 à 17:55:38

                  C_leDebut... a écrit:

                  Je vais me renseigner pour faire cela sur Code Blocks.

                  Menu --> Project --> Build Options...

                  Et tu coches les cases (-Wall et -Wextra) dans l'onglet : Compiler settings...



                  • Partager sur Facebook
                  • Partager sur Twitter
                  ...

                  2 résultat pour 1 même condition

                  × 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