Partage
  • Partager sur Facebook
  • Partager sur Twitter

2 petits problèmes...

Sujet résolu
    12 décembre 2005 à 0:28:12

    Bonjour,
    Aujourd'hui, en bidouillant un peu, je me suis pris le délire de faire ce programme:
    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>

    int main()
    {
      srand((int)time(NULL));
      long age = 0, vies = 0, niveau = 1, rnd = 0, nbNiveaux = 7; // On initialise la variable à 0
      char ok;
      printf("Quel age avez-vous ? ");
      scanf("%ld", &age); // On demande d'entrer l'age avec scanf
      printf("Ah ! Vous avez donc %ld ans !\n\n", age);
      vies = 10 - (age/3);
      nbNiveaux = rand()%(10);//rand()%(n+1) n étant le nombre maximal des valeur possible
      printf("Au vu de votre âge de %ld ans, nous décidons de vous accorder %ld vies.\n",age,vies);
      printf("Vous allez devoir parcourir %ld niveau",nbNiveaux);
      if (nbNiveaux > 1) {
            printf("x");
      }
      printf("\n\n");
    getchar();
     while((niveau <= nbNiveaux) && (vies > 0)) {
      printf("###################################\n");
      printf("##          Niveau %ld              #\n",niveau);   
      printf("###################################\n\n");
      vies--;
      printf("Pan! Pan! Vous vous faites tuer!\n");
      printf("      Il vous reste %ld vie",vies);
      if (vies > 1) {
            printf("s");
      }
      printf("\n\n");
      niveau++;
      sleep(2);
    }
      niveau--; //décrémentation pour pas dire qu'on perdu ou gagné a un nv de plus :p
      if ((vies == 0) || (vies < 0)) {
            printf("###################################\n");
            printf("##          GAME OVER             #\n");   
            printf("###################################\n");
            printf("Vous avez échoué au niveau %ld\n\n",niveau);
      }
      else {
            printf("###################################\n");
            printf("##        VOUS AVEZ GAGNÉ         #\n");   
            printf("###################################\n\n");
            printf("Bravo soldat!\nVous avez accompli correctement le");
            if(nbNiveaux == 1) {
                    printf(" niveau");
            }

            else {
                    printf("s %ld niveaux",nbNiveaux);
            }
            printf("!\n\n");
      }
      printf("%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%\n\n");
      printf("Voulez-vous recommencer (o/n)? ");
      scanf("%c",&ok);
      printf("%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%\n\n");
      if (strcmp(ok,ok)) {
            main();
      }
     else {
      return 0;
     }
    }

    Le problème, c'est que le getchar(); ne fonctionne pas du tout et que à la fin, quoi que l'on réponde à la question, on obtient l'erreur suivante:
    Erreur de segmentation

    Comment résoudre ces 2 petits problèmes? :D Merci :D

    Remarque: Je suis sous Linux...
    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2005 à 0:38:54

      if (strcmp(ok,ok))
      faudra que tu m'expliques ça... en plus ta var est de type char et strcmp compare des tableaux de char terminés par un \0 (des chaînes)
      • Partager sur Facebook
      • Partager sur Twitter
        12 décembre 2005 à 1:00:18

        if (strcmp(ok,ok)) Arf... J'étais entrain de faire des tests et j'ai oublié de changer ca ^-^

        Normalement, c'est if (strcmp(ok,"o")) ;)
        • Partager sur Facebook
        • Partager sur Twitter
          12 décembre 2005 à 7:07:40

          ok c'est un char, strcmp c'est pour les chaînes ; un char c'est un seul caractère
          if (ok == 'o')
          • Partager sur Facebook
          • Partager sur Twitter
            12 décembre 2005 à 7:37:36

            Merci :D
            Me reste plus que le problème de getchar();

            :D
            • Partager sur Facebook
            • Partager sur Twitter
              12 décembre 2005 à 9:52:21

              Ca va qu'un modo est déjà passé et a répondu, sinon ça aurait été comme les autres : close_topic(TITRE_NON_EXPLICITE);

              Vous allez les lire ces post-it ? o_O

              /me pense à faire un post-it encourageant la lecture des post-it...
              • Partager sur Facebook
              • Partager sur Twitter
                12 décembre 2005 à 12:41:09

                Oui, mais bon... J'ai pas un varcahr(255) pour mon titre... ou alors, je créais 2 topics...
                • Partager sur Facebook
                • Partager sur Twitter
                  12 décembre 2005 à 13:24:21

                  Le getchar() après un scanf lit le \n qui est resté dans le buffer. Faudrait en faire deux pour avoir une pause mais ça devient vraiment moyen-laid après. :x

                  Sinon oui j'aurais dû prévenir pour le titre : prochaine fois = closed.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    12 décembre 2005 à 13:31:06

                    O, merci, j'ai comrpis :D Je ne vais plus utiliser que getcahr(); alors ^_^
                    • Partager sur Facebook
                    • Partager sur Twitter

                    2 petits problèmes...

                    × 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