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)
    0
    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
      0
    2. @Nabla'soups ... exact ... c'était évident pour moi. Tu fais bien de le préciser.

      Merci Nabla's d'avoir rectifié.

      ;o)
      0
    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 ...
      0
  2. Merci,

    J'ai plus qu'a corriger le reste de mes erreurs ^^.
    0
    1. 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);
      }
      
      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))
        0
      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
        }
        
        0
      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)"
        0
    2. Les erreurs doivent être a cause des if et else mais je vois pas pourquoi.
      0
      1. non pas de warning juste 2 erreurs, avec le premier else et avec la dernière accolade pour fermer le programme.
        0
        1. D'accords mais je dois mettre plusieurs if et else et si je ferme le premier if je sort de la boucle non?
          0
          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)
            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
              0
              1. J'ai trouvé mon erreur, une accolade mal placer. ^^'
                0
                1. Contributeur
                  on place tout ca en résolu ?
                  0
                  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. ^^'
                    0
                    1. Contributeur
                      essayes avec ces scores:
                      20,30,30,30
                      0
                  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);
                    }
                    
                    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
                      0
                      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.
                        0
                        1. Contributeur
                          fais moi le scanf comme ca:
                          scanf("%d %d %d %d",&C1,&C2,&C3,&C4);

                          et tu rentres donc sans les virgules ...
                          0
                      2. Sa marche, je peut le mettre ne résolue.
                        Merci beaucoup.
                        0
                        1. Contributeur
                          et un programmeur de plus en piste ;)
                          0