Partage
  • Partager sur Facebook
  • Partager sur Twitter

Plantage

Sujet résolu
    13 avril 2006 à 11:39:38

    Bonjour,
    je suis en train de taper un programme,mais que je veux tester une de ses fonction(en mode console),il plante:Ce programme ne répond pas...
    Je suis sous XP professionel

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

    void ecrire()
    {
         char texte[10000] = {0};
         char chemin[1000] = {0};
         FILE* fichier_texte = NULL;
         
         printf("Tapez le texte sans espace (limite 10000 charactere)\net appuyez sur entreepour valider:\n\n");
         
         scanf("%s", texte);
         
         printf("\n\nOu sauver le texte (Chemin du fichier)?\nSi il n'existe pas, il sera creer.\n");
         printf("Si il existe, le texte sera mis a la fin du fichier\n");
         
         scanf("%s", chemin);
         
         fichier_texte = fopen(chemin, "a");
         
         if(fichier_texte != NULL)
         {
                          printf("sauvegarde en cour...\n");
                          fputs(texte, fichier_texte);
                          printf("Sauvegarde terminee.\n");
                          fclose(fichier_texte);
                          }
                         
         else
         {
             printf("Impossible d'ouvrir/creer le fichier\n");
    }
    }

    Merci de vos aides
    • Partager sur Facebook
    • Partager sur Twitter
      13 avril 2006 à 12:22:19

      Merci d'utiliser la balise de coloration du code !
      • Partager sur Facebook
      • Partager sur Twitter

      If you'd like to join us, read "How do we work at OpenClassrooms"! :)

        13 avril 2006 à 12:23:00

        Oui désolé, je le fait!!
        • Partager sur Facebook
        • Partager sur Twitter
          13 avril 2006 à 13:01:55

          Il me semble avoir eu le même problème que toi il y a peu de temps. Ton programme bug au moment ou l'utilisateur doit entrer une valeur? (ici "texte" puis "chemin") Si oui, n'oublie pas de mettre le "&" devant, pour indiquer l'adresse à laquelle la valeure doit être enregistrée :)
          • Partager sur Facebook
          • Partager sur Twitter
            13 avril 2006 à 13:27:17

            Citation : xabu

            je suis en train de taper un programme,mais que je veux tester une de ses fonction(en mode console),il plante:Ce programme ne répond pas...


            Pux-tu être plus précis que 'il plante' ? Ce code est incomplet. Comment le testes-tu ? Parce que chez moi, avec un main(), il fonctionne.

            Ceci dit, il est dangereux, car il utilise scanf() sans protection. scanf() est une fonction difficile qui n'est pas recommandée aux débutants (et que peu de professionels maitrisent).

            Je conseille fgets().
            Ce qui résout du même coup le problème de la saisie 'avec espaces'...

            http://mapage.noos.fr/emdel/notes.htm#saisie
            http://mapage.noos.fr/emdel/notes.htm#fichiers
            Quel est la finalité de ton code ? Si c'est pour faire un 'mini éditeur de texte', c'est un peu léger...

            Citation : Phoenix07

            Il me semble avoir eu le même problème que toi il y a peu de temps. Ton programme bug au moment ou l'utilisateur doit entrer une valeur? (ici "texte" puis "chemin") Si oui, n'oublie pas de mettre le "&" devant, pour indiquer l'adresse à laquelle la valeure doit être enregistrée :)


            Non. 'chemin' est déjà une adresse... (l'adresse du premier élément du tableau de char nommé 'chemin').

            • Partager sur Facebook
            • Partager sur Twitter
            Music only !
              13 avril 2006 à 13:39:29

              Le morceau de code que je vous ai mis n'est qu'une fonction qui est appellé par une autre fonction qui elle même est apellée par la fonction main.
              donc:
              void ecrire est fini mais plante
              void ecrire appelée par void fichier qui est fini.
              main, je le complète au fur et a mesure que j'ecris les fonction.
              la fonction fichier peut faire appel a 3 fonction slon le choix de l'utilisateur:
              ecrire dans un fichier,
              lire un fichier,
              suprimer le contenu d'un fichier.
              • Partager sur Facebook
              • Partager sur Twitter
                13 avril 2006 à 13:42:56

                Citation : xabu

                Le morceau de code que je vous ai mis n'est qu'une fonction qui est appellé par une autre fonction qui elle même est apellée par la fonction main.
                donc:
                void ecrire est fini mais plante


                Je ne comprends pas 'plante'. Peux décrire exactement ce qui se passe ?

                Chez moi, ceci fonctionne :

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

                void ecrire()
                {
                   char texte[10000] = {
                                          0};
                   char chemin[1000] = {
                                          0};
                   FILE* fichier_texte = NULL;

                   printf("Tapez le texte sans espace (limite 10000 charactere)\net appuyez sur entreepour valider:\n\n");

                   scanf("%s", texte);

                   printf("\n\nOu sauver le texte (Chemin du fichier)?\nSi il n'existe pas, il sera creer.\n");
                   printf("Si il existe, le texte sera mis a la fin du fichier\n");

                   scanf("%s", chemin);

                   fichier_texte = fopen(chemin, "a");

                   if (fichier_texte != NULL)
                   {
                      printf("sauvegarde en cour...\n");
                      fputs(texte, fichier_texte);
                      printf("Sauvegarde terminee.\n");
                      fclose(fichier_texte);
                   }

                   else
                   {
                      printf("Impossible d'ouvrir/creer le fichier\n");
                   }
                }

                int main (void)
                {
                   ecrire();
                   return 0;
                }
                • Partager sur Facebook
                • Partager sur Twitter
                Music only !
                  13 avril 2006 à 13:55:32

                  Voici une screen shot:
                  (je l'ai retouré pour qu'elle passe)

                  Image utilisateur
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 avril 2006 à 19:36:52

                    Citation : xabu

                    Voici une screen shot:
                    (je l'ai retouré pour qu'elle passe)
                    </image>


                    J'ai refait l'essai, le code est correct et ne plante pas. Comme ton code est incomplet, je suppose qu'il y a un autre problème ailleurs, et que cette fonction ne fait que le révéler.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Music only !
                      13 avril 2006 à 21:57:49

                      Tu as oublier les "&" dans scanf("%s", &texte); et scanf("%s", &chemin);.

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

                      void ecrire()
                      {
                           char texte[10000] = {0};
                           char chemin[1000] = {0};
                           FILE* fichier_texte = NULL;
                           
                           printf("Tapez le texte sans espace (limite 10000 charactere)\net appuyez sur entreepour valider:\n\n");
                           
                           scanf("%s", texte);
                           
                           printf("\n\nOu sauver le texte (Chemin du fichier)?\nSi il n'existe pas, il sera creer.\n");
                           printf("Si il existe, le texte sera mis a la fin du fichier\n");
                           
                           scanf("%s", chemin);
                           
                           fichier_texte = fopen(chemin, "a");
                           
                           if(fichier_texte != NULL)
                           {
                                            printf("sauvegarde en cour...\n");
                                            fputs(texte, fichier_texte);
                                            printf("Sauvegarde terminee.\n");
                                            fclose(fichier_texte);
                                            }
                                           
                           else
                           {
                               printf("Impossible d'ouvrir/creer le fichier\n");
                      }
                      }

                      int main (int argc, char** argv)
                      {
                              ecrire();
                              system("PAUSE");
                              return 0;
                      }
                      • Partager sur Facebook
                      • Partager sur Twitter
                        14 avril 2006 à 0:09:34

                        Citation : suyt

                        Tu as oublier les "&" dans scanf("%s", &texte); et scanf("%s", &chemin);.


                        {
                             char texte[10000] = {0};
                             char chemin[1000] = {0};

                             scanf("%s", texte);
                             
                             scanf("%s", chemin);

                        Pourquoi faire ? 'texte' et 'chemin' sont des noms de tableaux. Ce sont donc déjà des adresses... (celles de leurs premiers éléments réspectifs)


                        • Partager sur Facebook
                        • Partager sur Twitter
                        Music only !
                          14 avril 2006 à 11:52:24

                          Euh... Bah... Je crois que je vais un peu relir les cours de m@téo...
                          • Partager sur Facebook
                          • Partager sur Twitter
                            14 avril 2006 à 16:16:14

                            J'ai réussi a corriger le problème.
                            En fait, je n'ai rien modifié a la fonction dont je vous est montré le code.
                            J'ai mis le contenu de la fonction fichier(qui appelai la fonction ecrire) dans la fonction main.
                            Merci de votre aide(je n'aurais peut-etre pas pu deviner ça et j'aurais abandonné une partie de mon programme).
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Plantage

                            × 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