Partage
  • Partager sur Facebook
  • Partager sur Twitter

mon programme a cessé de fonctionner

    22 novembre 2017 à 12:24:17

    Bonjour,

    je suis en train de suivre la formation en C et je suis en train de travailler sur le TP plus ou moins. j'ai écris un programme que j'ai compilé sans problème. Celui ci a tourné 2 ou 3 fois en répondant au cahier des charges. Puis, il a planté et j'ai le message suivant: "plusoumoins a cessé de fonctionner ...Windows va fermer ce programme et vous indiquer si une solution est disponible". Dans le doute, j'ai testé mon programme sur une autre machine et j'obtiens le meme message. je peux faire tourner les autres programmes que j'ai crées et je peux créer de nouveaux .

    quelqu'un peut il me mettre sur la voie ?

    Merci d'avance, Richard.

    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2017 à 12:35:29

      Il y a une erreur dans ton code, peut-être un débordement de tableau.
      • Partager sur Facebook
      • Partager sur Twitter
        22 novembre 2017 à 12:56:54

        ou peut-être l'oubli du signe & dans un scanf ?

        • Partager sur Facebook
        • Partager sur Twitter
          22 novembre 2017 à 13:24:36

          je veux bien chercher ce que vous me proposez mais dans ce cas il devrait y avoir des erreurs à la compilation.
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            22 novembre 2017 à 13:26:25

            On veut bien t'aider à résoudre ton problème, mais dans ce cas tu devrais nous fournir le code à la création du topic.
            • Partager sur Facebook
            • Partager sur Twitter
              22 novembre 2017 à 13:32:41

              MettayRichard a écrit:

              je veux bien chercher ce que vous me proposez mais dans ce cas il devrait y avoir des erreurs à la compilation.


              Non, pas forcément.

              (As-tu vérifié que, dans tes 'scanf', il ne manque pas des symboles '&', et que si tu utilises des tableaux, les indices ne dépassent pas leurs limites ?)

              -
              Edité par robun 22 novembre 2017 à 13:33:41

              • Partager sur Facebook
              • Partager sur Twitter
                22 novembre 2017 à 14:29:45

                je viens de vérifier : je n'ai oublié aucun & dans les scanf. Par ailleurs, je n'ai pas de tableau dans mon code. Avez vous d'autres idées ?
                • Partager sur Facebook
                • Partager sur Twitter
                  22 novembre 2017 à 14:32:11

                  Sans voir le code, on va pas pouvoir t'aider plus !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 novembre 2017 à 14:32:13

                    ok, comment dois je m'y prendre pour vous envoyer le code ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 novembre 2017 à 14:33:44

                      Tu clique sur le bouton </> au dessus du champ de saisie du forum et tu colles ton code dans la fenêtre qui vient de s'ouvrir.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 novembre 2017 à 14:35:37

                        le plus simple, je pense est de faire un copier coller. voici mon code :

                        #include <stdio.h>

                        #include <stdlib.h>

                        #include <time.h>

                        int main ( int argc, char** argv )

                        {

                            int nombreMystere = 0, nombreEntre = 0;

                            int nombremaximum = 0;

                            const int MIN = 1;

                            int niveau = 0;

                            int nombredecoup = 0;

                            int continuerpartie = 1;

                            srand(time(NULL));

                            nombreMystere = (rand() % (nombremaximum - MIN + 1)) + MIN;// Génération du nombre aléatoire

                            printf("bienvenue dans le jeu du plus ou moins\n");

                            printf("niveau 1 : trouver un nombre compris entre 1 et 100\n");

                            printf("niveau 2 : trouver un nombre compris entre 1 et 1000\n");

                            printf("niveau 3 : trouver un nombre compris entre 1 et 10000\n");

                            printf("quel niveau choisissez vous?\n");

                            scanf("%d",&niveau);

                            switch(niveau)

                            {

                            case 1 :

                                nombremaximum = 100;

                                break;

                            case 2 :

                                nombremaximum = 1000;

                                break;

                            case 3 :

                                nombremaximum = 10000;

                                break;

                            default :

                                printf("il n'y a que 3 niveaux de jeu\n");

                                break;

                            }

                          printf("le nombre mystere est %d\n",nombreMystere);

                            /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */

                          do

                            {

                        while(continuerpartie)

                        {

                          printf("Quel est le nombre ? "); // On demande le nombre

                                scanf("%d", &nombreEntre);

                                nombredecoup++;

                                // On compare le nombre entré avec le nombre mystère

                                if (nombreMystere > nombreEntre)

                                    {

                                        printf("C'est plus !\n\n");

                                    }

                                else if (nombreMystere < nombreEntre)

                                    {

                                        printf("C'est moins !\n\n");

                                    }

                                else

                                   {

                                   nombreMystere = (rand() % (nombremaximum - MIN + 1)) + MIN;

                                    printf ("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n", nombredecoup);

                                    printf("le nombre mystere est %d\n",nombreMystere);

                                    nombredecoup = 0;

                                     printf("voulez vous refaire une partie? si oui tapez 1, sinon tapez 0\n");

                                    scanf("%d",&continuerpartie);

                                   }

                                }

                            } while (nombreEntre != nombreMystere && continuerpartie);

                            return 0;

                        }

                        • Partager sur Facebook
                        • Partager sur Twitter
                          22 novembre 2017 à 14:40:44

                          MettayRichard a écrit:

                          le plus simple, je pense est de faire un copier coller.

                          Le plus simple pour toi, mais pas pour ceux qui lise ton code.

                          Alors tu modifies ton post en faisant ce que je t'ai dit.

                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 novembre 2017 à 14:43:33

                            pour le moment, je ne trouve pas le symbole </> au dessus du champ de saisie du forum.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              22 novembre 2017 à 14:46:55

                              ok je viens de trouver sans lunettes !
                              #include <stdio.h>
                              #include <stdlib.h>
                              #include <time.h>
                              
                              int main ( int argc, char** argv )
                              {
                                  int nombreMystere = 0, nombreEntre = 0;
                                  int nombremaximum = 0;
                                  const int MIN = 1;
                                  int niveau = 0;
                                  int nombredecoup = 0;
                                  int continuerpartie = 1;
                                  srand(time(NULL));
                                  nombreMystere = (rand() % (nombremaximum - MIN + 1)) + MIN;// Génération du nombre aléatoire
                              
                                  printf("bienvenue dans le jeu du plus ou moins\n");
                                  printf("niveau 1 : trouver un nombre compris entre 1 et 100\n");
                                  printf("niveau 2 : trouver un nombre compris entre 1 et 1000\n");
                                  printf("niveau 3 : trouver un nombre compris entre 1 et 10000\n");
                                  printf("quel niveau choisissez vous?\n");
                              
                                  scanf("%d",&niveau);
                              
                                  switch(niveau)
                                  {
                                  case 1 :
                                      nombremaximum = 100;
                                      break;
                                  case 2 :
                                      nombremaximum = 1000;
                                      break;
                                  case 3 :
                                      nombremaximum = 10000;
                                      break;
                                  default :
                                      printf("il n'y a que 3 niveaux de jeu\n");
                                      break;
                                  }
                                printf("le nombre mystere est %d\n",nombreMystere);
                                  /* La boucle du programme. Elle se répète tant que l'utilisateur n'a pas trouvé le nombre mystère */
                                do
                                  {
                              while(continuerpartie)
                              {
                                printf("Quel est le nombre ? "); // On demande le nombre
                                      scanf("%d", &nombreEntre);
                                      nombredecoup++;
                              
                                      // On compare le nombre entré avec le nombre mystère
                              
                                      if (nombreMystere > nombreEntre)
                                          {
                                              printf("C'est plus !\n\n");
                                          }
                                      else if (nombreMystere < nombreEntre)
                                          {
                                              printf("C'est moins !\n\n");
                                          }
                                      else
                                         {
                                         nombreMystere = (rand() % (nombremaximum - MIN + 1)) + MIN;
                              
                                          printf ("Bravo, vous avez trouve le nombre mystere en %d coups !!!\n", nombredecoup);
                              
                                          printf("le nombre mystere est %d\n",nombreMystere);
                                          nombredecoup = 0;
                              
                                           printf("voulez vous refaire une partie? si oui tapez 1, sinon tapez 0\n");
                                          scanf("%d",&continuerpartie);
                              
                                         }
                              
                                      }
                                  } while (nombreEntre != nombreMystere && continuerpartie);
                              
                              
                              
                                  return 0;
                              }
                              
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                22 novembre 2017 à 14:53:36

                                OK, je viens de trouver le problème ....

                                J'avoue que je ne m'y attendais pas.

                                Ton problème est à la ligne 14.
                                La ligne déclenche un SIGFPE, c'est à dire une opération arithmétique interdite.

                                ==29669== Process terminating with default action of signal 8 (SIGFPE)
                                ==29669==  Integer divide by zero at address 0x803E98BA4
                                ==29669==    at 0x4008A1: main (main.c:14)

                                Alors, que penses-tu qu'il se passe ?

                                Pour info, je suis sous linux et j'ai utiliser valgrind, mais un quelconque débuggeur t'aurait autant aidé.

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  22 novembre 2017 à 15:01:00

                                  Pour ma part et pour l'instant, je suis sous windows 10. Cette ligne, comme tu le sais permet la génération d'un nombre aléatoire.

                                  je ne vois pas quel code ecrire. ou est mon erreur sur cette ligne ?

                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    22 novembre 2017 à 15:14:33

                                    Je me répète, mais il y a un problème "arithmétique" sur la ligne 14.
                                    Le message en anglais te dit même que c'est un problème de "division par zéro".

                                    Sachant que le modulo, c'est le reste de la division entière de deux nombre, que penses-tu qu'il se passe ?

                                    -
                                    Edité par Anonyme 22 novembre 2017 à 15:15:03

                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      22 novembre 2017 à 15:37:59

                                      je viens de trouver le problème : dans les déclarations de variables, j'ai ecrit :  int nombremaximum = O ;

                                      le problème vient de là, il ne faut pas affecter de valeur à nombremaximum. Il suffit de déclarer int nombremaximum;

                                      En tout cas, merci pour votre aide, cela m'a mis sur la piste.

                                      A+, richard.

                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        22 novembre 2017 à 15:49:57

                                        Raté, mais sur la bonne voie.

                                        Tu viens juste de remplacer un problème par un autre.
                                        Et d'ailleurs, si ton compilateur été correctement paramétré, tu aurais des warnings.

                                        Encore une fois, pourquoi il y a un problème arithmétique à la ligne 14 ?
                                        Le fait que nombremaximum vaille 0 fait partie du problème, mais ce n'est pas la source.
                                        Enlever le "= 0", c'est juste mettre un pansement sur une jambe de bois.
                                        • Partager sur Facebook
                                        • Partager sur Twitter

                                        mon programme a cessé de fonctionner

                                        × 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