Problème avec if

Problème avec if - C - Programmation

Marsh Posté le 01-12-2005 à 10:14:23    

Bonjour,
 
Je dois réaliser un petit programme en C pour apprendre. Le problème se situe au niveau des conditions (trop complexes ?).
 

Code :
  1. void main ()
  2. {
  3. // Declarations
  4. int mois, saison, flag=0;
  5. do {
  6. printf ("1. Janvier\n2. Fevrier\n3. Mars\n4. Avril\n5. Mai\n6. Juin\n7. Juillet\n8. Aout\n9. Septembre\n10. Octobre\n11. Novembre\n12. Decembre" );
  7. printf ("\n\n1. Hiver\n2. Printemps\n3. Ete\n4. Automne" );
  8. printf ("\n\nEntrez le mois et la saison: " );
  9. scanf ("%d %d", &mois, &saison);
  10. if (saison==1 && (mois==1 || mois==2 || mois==3)) {
  11. flag=1;
  12. } else {
  13. if (saison==2 && (mois==4 || mois==5 || mois==6)) {
  14.  flag=1;
  15. } else {
  16.  if (saison==3 && (mois==7 || mois==8 || mois==9)) {
  17.   flag=1;
  18.  } else {
  19.   if (saison==4 && (mois==10 || mois==11 || mois==12)) {
  20.    flag=1;
  21.   } else {
  22.    flag=2;
  23.   }
  24.       }
  25.    }
  26. }
  27. if (saison!=0 && mois!=0) {
  28. switch(flag) {
  29.  case 1 : printf ("\nVous avez entré la bonne réponse" ); break;
  30.     case 2 : printf ("\nLa réponse entrée n'est pas correcte" ); break;
  31. }
  32. getch();
  33. }
  34. } while (mois!=0 && saison!=0);
  35. }


 
Je souhaiterai faire comme condition si saison==1 et (mois==1 ou mois==2 ou mois==3) mais ça ne fonctionne que si je rentre 1 pour saison et 1 pour le mois.
 
Merci d'avance

Message cité 2 fois
Message édité par cinezone le 01-12-2005 à 10:17:07
Reply

Marsh Posté le 01-12-2005 à 10:14:23   

Reply

Marsh Posté le 01-12-2005 à 10:48:17    


je te conseille plutot  
 

Code :
  1. if(saison ==1){
  2.    switch(mois){
  3.        case 1: printf("reponse bidon" ); break;
  4.        case 2:
  5.        case 3:
  6.        case 4:
  7.        case 5:
  8.        case 6:
  9.        case 7:
  10.        case 8:
  11.        case 8:
  12.        case 10:
  13.        case 11:
  14.        case 12:
  15.       default :
  16. }
  17. }


---------------

Reply

Marsh Posté le 01-12-2005 à 11:04:05    

cinezone a écrit :

Bonjour,
 
Je dois réaliser un petit programme en C pour apprendre. Le problème se situe au niveau des conditions (trop complexes ?).
 
Je souhaiterai faire comme condition si saison==1 et (mois==1 ou mois==2 ou mois==3) mais ça ne fonctionne que si je rentre 1 pour saison et 1 pour le mois.
 
Merci d'avance


 
 
Bon, déjà il faut apprendre que "main" est de type "int" et pas "void".
Ensuite, ton "flag=2" final est inutile puisque si rien ne correspond, flag vaut déjà 0 et cela ne sert à rien de lui mettre 2.
Enfin, un test "if (saison == 1 && (mois == 1 || mois == 2 || mois == 3)" bien que correct peut s'écrire aussi plus simplement "if (saison == 1 && mois >=1 && mois <= 3)"
 
Bon, mis à part ces remarques qui n'influent en rien le fonctionnement, je ne vois pas trop pourquoi ton pgm ne fonctionne pas. Les tests écrits sont corrects.
 
Essaye d'afficher "saison" et "mois" juste après la saisie pour voir ce que le pgm reçoit réellement.
 
PS: c'est pas recommandé un "scanf" avec plusieurs valeurs à la fois. Cela t'impose de saisir sur une ligne un premier nombre suivi d'un espace puis un second nombre et si tu respectes pas le format (le "f" signifie "format" ) imposé, "scanf" pige plus rien...


Message édité par Sve@r le 01-12-2005 à 11:07:02

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 01-12-2005 à 14:05:41    

cinezone a écrit :

Je dois réaliser un petit programme en C pour apprendre. Le problème se situe au niveau des conditions (trop complexes ?).


La logique est correcte, mais le codage est trop complexe. Essaye ça et pose des questions si tu ne comprends pas.


#include <stdio.h>
 
int main (void)
{
   int fin;
 
   do
   {
      int mois;
      int saison;
      {
         int n;
 
         printf ("1. Janvier\n"
                 "2. Fevrier\n"
                 "3. Mars\n"
                 "4. Avril\n"
                 "5. Mai\n"
                 "6. Juin\n"
                 "7. Juillet\n"
                 "8. Aout\n"
                 "9. Septembre\n"
                 "10. Octobre\n"
                 "11. Novembre\n"
                 "12. Decembre"
                 "\n"
                 "\n"
                 "1. Hiver\n"
                 "2. Printemps\n"
                 "3. Ete\n"
                 "4. Automne\n" );
 
         do
         {
            printf ("\nEntrez le mois et la saison (ou 0 0 pour quitter): " );
            fflush (stdout);
 
            n = scanf ("%d %d", &mois, &saison);
 
            if (n != 2)
            {
               int c;
 
               while ((c = getchar ()) != '\n' && c != EOF)
               {
               }
            }
         }
         while (n != 2);
      }
 
      fin = saison == 0 && mois == 0;
 
      if (!fin)
      {
         int ok;
 
         switch (saison)
         {
         case 1:
            ok = mois == 1 || mois == 2 || mois == 3;
            break;
         case 2:
            ok = mois == 4 || mois == 5 || mois == 6;
            break;
         case 3:
            ok = mois == 7 || mois == 8 || mois == 9;
            break;
         case 4:
            ok = mois == 10 || mois == 11 || mois == 12;
            break;
         default:
            ok = 0;
         }
 
         printf ("%s\n", ok ? "Bonne reponse" : "Reponse incorrecte" );
      }
   }
   while (!fin);
 
   return 0;
}


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed