Probleme programme en c

Résolu
Bonjour,

J'essaye de créer un programme en c mais le logiciel que j'utilise "code blox" m'affiche a chaque fois un problème avec une parenthèse après mon if.

Le but de ce programme est de savoir en entrant les pourcentage de réussite de 4 candiadts politique si le candidat numéro 1 est élue, en ballotage favorable ou en ballotage défavorable.

Voici le programme que j'ai tapé:

#include <stdio.h>

int main(void)

{
int C1,C2,C3,C4;

printf("Veuillez rentrer le score des 4 candidats");
scanf("%d,%d,%d,%d",&C1,&C2,&C3,&C4);

if(C1>50%)
{

printf("Le cancidat est élu au premier tour");

else

if((C1<12.5%) || (C2>50%) || (C3>50%) || (C4>50%))
{

printf("le candidat est battu");

else

if((C1>C2) && (C1>C3) && (C1>C4))
{
printf("le candidat est en ballotage favorable");

else

printf("le candidat est en ballotage défavorable");

}
}
}

return(0);
}

Si vous voyez comment j'arriverais à résoudre ce problème.
Merci d'avance pour votre aide cordialement.

17 réponses

Résumé de la discussion

Le cœur du fil porte sur un programme en C qui détermine le statut d'un candidat politique à partir des pourcentages des quatre candidats et des règles du premier tour ou ballotage. Plusieurs messages pointent des erreurs de syntaxe et de logique dans le code initial, notamment des parenthèses manquantes, des accolades mal placées et des conditions if/else mal imbriquées. Des propositions de correction expliquent comment structurer proprement les blocs conditionnels, ajuster les comparaisons (50 % et autres seuils) et clarifier l’usage de scanf pour lire les valeurs. En parallèle, des versions corrigées illustrent l’ordre des tests et l’emploi d’un flux logique cohérent, afin d’obtenir un résultat fiable sans avertissements.

Bobot (l’IA à votre service)
  1. Bonjour,

    Enlève tous les "%" de ton code.

    ;o)
    1. Contributeur
      pas tous ...

      scanf("%d,%d,%d,%d",&C1,&C2,&C3,&C4);

      if((C1<12.5%) || (C2>50%) || (C3>50%) || (C4>50%))

      seulement ceux qui sont dans les if !
      ecux du scanf doivent rester

      et merci de poster le nouveau code en utilisant les balises < code > (a coté de souligné), pour qu'on ai l'indentation
    2. @Nabla'soups ... exact ... c'était évident pour moi. Tu fais bien de le préciser.

      Merci Nabla's d'avoir rectifié.

      ;o)
    3. Contributeur
      @Polux31oui, je sais, c'est tellement gros qu'on pense pas qu'il puisse les enlever, mais comme il est débutant, je préférais faire une reflexion pas très utile ;)

      s'il y a des erreurs, avec l'indentation on verra mieux ...
  2. Voici le nouveau code:

    #include <stdio.h>
    
    int main(void)
    
    
    
    {
        int C1,C2,C3,C4;
    
        printf("Veuillez rentrer le score des 4 candidats:/n");
        scanf("%d,%d,%d,%d",&C1,&C2,&C3,&C4);
    
    
        if(C1>50)
        {
    
            printf("Le cancidat est élu au premier tour");
    
            else
    
            if((C1<12.5) || (C2>50) || (C3>50) || (C4>50))
            {
    
                printf("le candidat est battu");
    
                else
    
                if((C1>C2) && (C1>C3) && (C1>C4))
                {
                    printf("le candidat est en ballotage favorable");
    
                    else
    
                    printf("le candidat est en ballotage défavorable");
    
                }
            }
        }
    
    
    return(0);
    }
    
    1. Contributeur
      deja, à première vu, meme si ca devrait etre qu'un warning:
      int C1,C2,C3,C4;

      if((C1<12.5) || (C2>50) || (C3>50) || (C4>50))
    2. Contributeur
      ensuite:

              if((C1<12.5) || (C2>50) || (C3>50) || (C4>50))
              {
      
                  printf("le candidat est battu");
      
                  else                               //nabla's: c'est quoi ce else ??? 
      
                  if((C1>C2) && (C1>C3) && (C1>C4))
                  {
                      printf("le candidat est en ballotage favorable");
      
                      else                         // et celui ci ???
      
                      printf("le candidat est en ballotage défavorable");
      
                  }
              }


      a mon avis, tu devrais remplacer tes else par des } else {
      car tu ne fermes pas ton if, et tu n'ouvres pas ton else ...

      la syntaye, c'est pas
      if 
      {
          //blabla
          else
          //blabla
      }


      mais bien
      if 
      {
          //blabla
      }
      else
      {
          //blabla
      }
      
    3. @Nabla'sil me semble aussi que c'est mieux comme ça:

      code:
      int machin;
      
      if(machin) {
                        blablaba;
                          }
            else {
                        blablaba;
                          }
      


      que:

      code:
      if(machin){
                       blablabla;
      
      
            else { 
                       blablabla;
                   }
               }


      si tu fais ça il me semble que t'as un problème avec le 'else' qui est dans t'as condition 'if(machin)"
  3. Les erreurs doivent être a cause des if et else mais je vois pas pourquoi.
    1. non pas de warning juste 2 erreurs, avec le premier else et avec la dernière accolade pour fermer le programme.
      1. D'accords mais je dois mettre plusieurs if et else et si je ferme le premier if je sort de la boucle non?
        1. Voila le programme modifier en suivant tes conseil:

          #include <stdio.h>
          
          int main(void)
          
          
          
          {
              int C1,C2,C3,C4;                //les différentes variables
          
                                              //Débuts du programme
          
              printf("Veuillez rentrer le score des 4 candidats:/n");
              scanf("%d,%d,%d,%d",&C1,&C2,&C3,&C4);
          
          
              if(C1>50)
              {
          
                  printf("Le cancidat est élu au premier tour");
              }
                  else
                  {
          
                      if((C1<12.5) || (C2>50) || (C3>50) || (C4>50))
                      {
          
                          printf("le candidat est battu");
          
                      }
          
                          else
                          {
          
                              if((C1>C2) && (C1>C3) && (C1>C4))
                              {
                                  printf("le candidat est en ballotage favorable");
          
                              }
          
                                      else
                                      {
          
                                          printf("le candidat est en ballotage défavorable");
          
                                      }
          
                      }
                  }
              }
          
          
          return(0);
          }
          


          Maintenant j'ai un warning pour la dernière accolade et une erreur avec le return(0)
          1. Contributeur
            a mon avis, c'est ca que tu veux faire:

            #include <stdio.h>
            
            int main(void)
            
            
            
            {
                int C1,C2,C3,C4;
            
                printf("Veuillez rentrer le score des 4 candidats:/n");
                scanf("%d,%d,%d,%d",&C1,&C2,&C3,&C4);
            
            
                if(C1>50)
                {
            
                    printf("Le cancidat est élu au premier tour");
                }
                else
                {
                    if((C1<12.5) || (C2>50) || (C3>50) || (C4>50))
                    {
                        printf("le candidat est battu");
                    }
                    else
                    {
                        if((C1>C2) && (C1>C3) && (C1>C4))
                        {
                            printf("le candidat est en ballotage favorable");
                        }
                        else
                        {
                            printf("le candidat est en ballotage défavorable");
                        }
                    }
                }
            
            
            return(0);
            }
            
            


            quand tu fais un else, tu dois fermer le if auquel il se raporte, et le else suit imédiatement la fermeture du if. Sinon il ne sait pas a quoi se raporte le else

            dans ton cas, comem les if et else ne sont suivi que d'uen isntruction, toutes tes acolades sont facultatives, mais prends l'habitude de les mettre
            1. Euh, pas encore je le test mais la boucle:

              else
                              {
              
                                  if((C1>C2) && (C1>C3) && (C1>C4))
                                  {
                                      printf("le candidat est en ballotage favorable");
                                  }
              
                                  else
                                  {
              
                                  printf("le candidat est en ballotage defavorable");
              
                                  }


              ne s'exécute pas, il n'y a que les deux première boucle qu'il le sont, soit il est battu soit il gagne, je comprends pas ou peut être l'erreur :/

              Je sais je suis pénible. ^^'
              1. Contributeur
                essayes avec ces scores:
                20,30,30,30
            2. Le candidat est encore battu :/

              Voici le programme complet:

              #include <stdio.h>
              
              int main(void)
              
              
              
              {
                  int C1,C2,C3,C4;                //les différentes variables
              
                                                  //Débuts du programme
              
                  printf("Veuillez rentrer le score des 4 candidats:  ");
                  scanf("%d,%d,%d,%d",&C1,&C2,&C3,&C4);
              
              
                  if(C1>50)                       //Première comparaison
                  {
              
                      printf("Le cancidat est elu au premier tour");
                  }
                  else
                  {
              
                          if((C1<12.5) || (C2>50) || (C3>50) || (C4>50))      //Deuxième comparaison
                          {
              
                          printf("le candidat est battu");
                          }
                              else
                              {
              
                                  if((C1>C2) && (C1>C3) && (C1>C4))
                                  {
                                      printf("le candidat est en ballotage favorable");
                                  }
              
                                  else
                                  {
              
                                  printf("le candidat est en ballotage defavorable");
                                  }
                              }
                  }
              
              return(0);
              }
              
              1. Contributeur
                rajoutes moi un:
                printf("%d,%d,%d,%d",C1,C2,C3,C4);
                pour verifier que tu récupères bien les bonnes valeurs

                et changes moi ca: (C1<12.5) en (C1<13) , ou passes toute l'application en float
                1. en effet les valeur de C2, C3 et C4 sont un plus grande d'environ quelques millions de leur valeur initiale ^^'
                  Chose que je ne trouve pas logique car elles leur valeurs sont déjà définit au début du programme.
                  1. Contributeur
                    fais moi le scanf comme ca:
                    scanf("%d %d %d %d",&C1,&C2,&C3,&C4);

                    et tu rentres donc sans les virgules ...