Erreur en prog C

Résolu
KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   -  
mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
je vien de commencer le langage C, j'ai suivi les cours du site zéro et je me retrouve avec ce code. Code:Blocks de me détecte pas d'erreur mais quand le prog arrive à la fin pour demander s'il veut faire une nouvelle partie, windows me dit qu'il doit fermer :-(.
Le voilà :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(int argc, char *argv[])
{
const long MAX = 100, MIN = 1;
long nombreEntre = 0, nombreMystere = 0, compteur = 0;
int continuerPartie = 0, erreur = 1;

srand(time(NULL));
nombreMystere = (rand() % (MAX - MIN +1)) + MIN;

do
{
do
{
printf("Quel est le nombre ? ");
scanf("%ld", &nombreEntre);
if (nombreMystere > nombreEntre) {
printf("C'est plus !\n\n");
}
else if (nombreMystere < nombreEntre) {
printf("C'est moins !\n\n");
}
else if (nombreEntre == nombreMystere) {
printf("Bravo ! Vous avez trouve le nombre mystere en %ld coups !\n\n", compteur);
}

compteur++;
}
while (nombreMystere != nombreEntre);

printf("Voulez-vous faire une nouvelle partie ? Tapez 1 pour Oui ou 0 pour Non");
scanf("%ld", continuerPartie);
do
{
if (continuerPartie != 1 || 0)
printf("Veuillez taper 1 ou 0 !");
else (erreur = 0);
}
while (erreur == 1);
}
while (continuerPartie == 1);
printf("Au revoir !");

return 0;
}

Si pouviez me dire ce qu'il ne vas pas ce serait pas mal.
Merci
Configuration: Windows XP
Firefox 2.0.0.12

4 réponses

  1. freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention   165
     
    Bonjour.
    Ton test if (continuerPartie != 1 || 0) ne sert à rien. En effet le || renvoie vrai si l'une des expressions est vraie. Or quand tu fait || 0, 0 est vrai donc il passe pas au bon endroit.
    Il vaut mieu mettre

    if (continuerPartie != 1 || continuerPartie != 0)

    Voilou en espérant que cela t'aura aidé.
    0
    1. KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   224
       
      Merci c'est sympa de m'avoir aidé sur ce point là, j'y avait pas pensé mais windows me met toujours une erreur après la compilation !
      0
      1. freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention   165 > KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention  
         
        Je ne suis plus sur de la syntaxe, mais est ce que
        while (continuerPartie == 1);
        printf("Au revoir !");

        ne serait -il pas mieux en
        while (continuerPartie == 1)
        printf("Au revoir !");

        dans le doute en
        while (continuerPartie == 1){
        printf("Au revoir !");
        }

        ??
        0
      2. KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   224 > freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention  
         
        Je crois qu'on est pas sur la même longueur d'ondes ^^
        En fait j'ai pas mis de boucle while, j'ai mis une boucle DO ... WHILE donc while est à la fin de la boucle est n'est pas fait pour prendre en compte le Au revoir !
        0
      3. hamza > freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention  
         
        apres la boucle
        while(......);
        c'est faut il n'y a pas le ;
        le juste :
        while(...)
        {
        }
        0
      4. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437 > hamza
         
        toi ta pas bien compris...
        je t'invite a relire le post 4 c'est une boucle do...while pas une boucle while donc il y a bien un ";"
        0
  2. freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention   165
     
    Youps la.....la tabulation manquante et c'est le drame dans la relecture.
    Ben j'ai pu d'idées la désolé.
    0
    1. KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   224
       
      Bon c'est pas grave on verra si quelq'un d'autre pourra m'aider ! Merci quand même !
      Au fait pour la tabulation quand j'ai collé le code elle y était mais elle a disparu :-(
      0
  3. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    essaye en mettant
    scanf("%d", continuerPartie); 

    puisque tu as déclaré continuerPartie comme un int et pas un long

    et pour que les tabulations reste il faut que tu utilise les balises a coté du souligné en haut a gauche du cadre ou tu écris et tu mets ton code entre les deux
    0
    1. KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   224
       
      C'est toujours la même chose windows me met que main.exe a rencontré un prob et doit fermer.


      Je reposte le code avec les tabulations :

      #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      
      int main(int argc, char *argv[])
      {
          const long MAX = 100, MIN = 1;
          long nombreEntre = 0, nombreMystere = 0, compteur = 0;
          int continuerPartie = 0, erreur = 1;
      
          srand(time(NULL));
          nombreMystere = (rand() % (MAX - MIN +1)) + MIN;
      
          do
          {
              do
              {
              printf("Quel est le nombre ?  ");
              scanf("%ld", &nombreEntre);
                  if (nombreMystere > nombreEntre) {
                      printf("C'est plus !\n\n");
                  }
                  else if (nombreMystere < nombreEntre) {
                      printf("C'est moins !\n\n");
                  }
                  else if (nombreEntre == nombreMystere) {
                  printf("Bravo ! Vous avez trouve le nombre mystere en %ld coups !\n\n", compteur);
                  }
      
              compteur++;
              }
              while (nombreMystere != nombreEntre);
      
          printf("Voulez-vous faire une nouvelle partie ? Tapez 1 pour Oui ou 0 pour Non");
          scanf("%d", continuerPartie);
              do
              {
                  if (continuerPartie != 1 || continuerPartie != 0)
                  printf("Veuillez taper 1 ou 0 !");
                  else (erreur = 0);
              }
              while (erreur == 1);
          }
          while (continuerPartie == 1);
          printf("Au revoir !");
      
      return 0;
      }
      
      0
      1. freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention   165 > KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention  
         
        dans cette partie
        if (continuerPartie != 1 || continuerPartie != 0)
        printf("Veuillez taper 1 ou 0 !");
        else (erreur = 0);
        enlève le else, la syntaxe sera correcte.
        Mais si c'est windows qui te sort une erreur c'est bizarre, ce n'est pas plutôt le compilo qui hurle??
        Si oui, peut tu nous poster l'erreur de compil??
        0
      2. KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   224 > freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention  
         
        Le else permet de faire stocker le nombre 0 dans la variable erreur, donc si l'utilisateur tape 1 ou 2, le else inscrira 0 dans la variable, donc le while ne fera pas de boucle donc continuera vers while (continuerPartie == 1);

        Windows me dit d'envoyer un rapport d'erreur ! Quand je met "ne pas envoyer" le main.exe ne se ferme pas mais le jeu se termine.


        PS: Pourrais-tu essayer de le compiler pour voir si ça fait pareil chez toi ?
        0
  4. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437
     
    je viens de voir que la syntaxe de ton scanf n'est pas correct il te manque le &
    essaye avec
    scanf("%d", &continuerPartie);
    0
    1. KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   224
       
      Des fois je me demande à quoi je pense ? ^^
      Finalement j'ai viré tout ce qu'il y a avait pour dire veuillez tapez 0 ou 1 ... je tombais à chaque fois dans une boucle infinie de printf("Veuillez taper 0 ou 1 !") !!!!

      Finalement ça donne ça et sa marche :

      #include <stdio.h>
      #include <stdlib.h>
      #include <time.h>
      
      int main(int argc, char *argv[])
      {
          const long MAX = 100, MIN = 1;
          long nombreEntre = 0, nombreMystere = 0, compteur = 0;
          int continuerPartie = 0, erreur = 1;
      
          srand(time(NULL));
          nombreMystere = (rand() % (MAX - MIN +1)) + MIN;
      
          do
          {
              do
              {
              printf("Quel est le nombre ?  ");
              scanf("%ld", &nombreEntre);
                  if (nombreMystere > nombreEntre) {
                      printf("C'est plus !\n\n");
                  }
                  else if (nombreMystere < nombreEntre) {
                      printf("C'est moins !\n\n");
                  }
                  else if (nombreEntre == nombreMystere) {
                  printf("Bravo ! Vous avez trouve le nombre mystere en %ld coups !\n\n", compteur);
                  }
      
              compteur++;
              }
              while (nombreMystere != nombreEntre);
      
          printf("Voulez-vous faire une nouvelle partie ? Tapez 1 pour Oui ou 0 pour Non");
          scanf("%d", &continuerPartie);
           }
          while (continuerPartie == 1);
          printf("Au revoir !\n\n\n");
      
      return 0;
      }
      
      0
      1. KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention   224 > KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention  
         
        Et encore merci pour vos aides !
        0
      2. freto Messages postés 1543 Date d'inscription   Statut Membre Dernière intervention   165 > KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention  
         
        Mais de rien...parfois la solution est sous notre nez et on ne la trouve pas.
        Bonne continuation a toi
        0
      3. mype Messages postés 2459 Date d'inscription   Statut Membre Dernière intervention   437 > KunGu Messages postés 1231 Date d'inscription   Statut Membre Dernière intervention  
         
        oui mais sans cette boucle si l'utilisateur ne rentre pas 1 ou 0 ton programme ne gere plus ce cas la...
        tu aurait pu remplace le OU par un ET ça devrait éviter la boucle infini
        0