Partage
  • Partager sur Facebook
  • Partager sur Twitter

fgets

    11 juin 2006 à 10:56:54

    Bonjour, si on fait :
    fgets(contenu, 1000, stdin);
    Ca nous demande d'entrer une valeur mais.....
    ca rajouter un \n a la fin !!!!:(:(:(:(

    Comment éviter cela ?
    • Partager sur Facebook
    • Partager sur Twitter
      11 juin 2006 à 11:01:55

      Salut :D

      La fonction clean de -ed- fait ce travail (et vide le buffer en même temps) :
      #include <stdio.h>
      #include <string.h>

      void clean (char *s, FILE *fp)
      {
         /* search ... */
         char *p = strchr (s, '\n');
         if (p != NULL)
         {
            /* ... and kill */
            *p = 0;
         }
         else
         {
            /* purge */
            int c;
            while ((c = fgetc(fp)) != '\n' && c != EOF)
            {
            }
         }
      }



      Exemple d'utilisation :
      char data[20];
      fgets(data, sizeof data, stdin);
      clean(data, stdin);


      EDIT: Par contre, il ne faut pas oublier que c'est une chaîne.

      Pour la convertir en entier, réel ou autre chose.

      int sscanf(const char *s, const char *format, ...);

      Exemple : sscanf(data, "%d", &uneVariableInt);

      long int strtol(const char *nptr, char **endptr, int base);

      Exemple : strtol(data, NULL, 10);

      Kr00pS :)
      • Partager sur Facebook
      • Partager sur Twitter
        11 juin 2006 à 11:22:43

        Pour char* => int, c'est atoi() la fonction... (n'utilisez pas les longs !!!)
        • Partager sur Facebook
        • Partager sur Twitter
          11 juin 2006 à 11:24:45

          Citation : remram44

          Pour char* => int, c'est atoi() la fonction... (n'utilisez pas les longs !!!)


          Non.

          atoi, c'est pas terrible, aucun test pour vérifier si la chaine que l'on convertie est valide et aucun test en cas de débordement.

          strtol, même pour les int c'est bien.
          strtod, pour les doubles.

          Tu as fais l'erreur de traduire mot à mot comme moi :

          Citation : -ed-

          Citation : Kr00pS

          2. strtol() cela veut dire string to long ?


          Peut importe ce que ça semble vouloir dire (il y a des pièges). Ce qui compte, c'est la définition de la fonction telle qu'elle est décrite dans la norme.



          Kr00pS
          • Partager sur Facebook
          • Partager sur Twitter
            11 juin 2006 à 12:12:34

            J'ai pas bien compris comment on utilise strtol !
            Tu peux essayer de me réexpliquer KrOOpS stp ? :euh:
            • Partager sur Facebook
            • Partager sur Twitter
              11 juin 2006 à 12:19:18

              Citation : Pierre89

              J'ai pas bien compris comment on utilise strtol !
              Tu peux essayer de me réexpliquer KrOOpS stp ? :euh:



              Bah, ça convertie une chaine en un entier avec une base de 10.

              Reprenons l'exemple que j'ai donné :
              char data[20];
              long temp;
              fgets(data, sizeof data, stdin);
              clean(data, stdin);

              temp = strtol(data, NULL, 10);


              Pour convertir un int, il faut faire un test, si la valeur que l'on veut convertir est plus grande ou plus petite que la valeur maximal (et minimal) qu'un int peut contenir, on doit afficher un message d'erreur.
              • Partager sur Facebook
              • Partager sur Twitter
                11 juin 2006 à 14:23:22

                Merci c'est le 10 que je ne comprenais pas (ça veut dire qu'on peut convertir en hexa (enfin il le fera sans les lettres quoi) et en binaire aussi ?)

                Ensuite pour le prot de strtol tu a mis :
                long int strtol(const char *nptr, char **endptr, int base);

                Alors ça renvoie un long int, mais tu parles aussi de long : long int = long ? :euh:

                Enfin dernière question (c'est la dernière promis :p ) : Le NULL à quoi sert-il, que représente le double tableau de char endptr ?

                Merci d'avance ^^
                • Partager sur Facebook
                • Partager sur Twitter
                  11 juin 2006 à 15:40:44

                  Citation : Pierre89

                  Merci c'est le 10 que je ne comprenais pas (ça veut dire qu'on peut convertir en hexa (enfin il le fera sans les lettres quoi) et en binaire aussi ?) <...>


                  Pourquoi toutes ces questions ? Les réponses sont dans ton livre de C, ton aide en ligne, les pages 'man' (manuel) de Google ou de Developpez : http://man.developpez.com/.

                  Bref, si on se donne un tout petit peut de mal, on trouve. On ne va pas passer notre temps à expliquer en détail ce qui est écrit noir sur blanc dans les docs. Les forums, c'est pas fait pour ça...
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    11 juin 2006 à 15:43:58

                    Merci de ton aide -ed- ! :-°

                    Je n'ai pas de livre de C, seulement un de C++ qui n'est pas très bien fait (enfin pour un débutant).

                    Je ne connais pas d'aide en ligne.

                    Et sur developpez j'ai jamais vraiment compris leur organisation.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      11 juin 2006 à 15:45:25

                      Citation : Pierre89

                      Merci de ton aide -ed- ! :-°

                      Je n'ai pas de livre de C, seulement un de C++ qui n'est pas très bien fait (enfin pour un débutant).

                      Je ne connais pas d'aide en ligne.

                      Et sur developpez j'ai jamais vraiment compris leur organisation.


                      Pour le livre, il y a un livre complet mais en anglais sur le site d'-ed-.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        11 juin 2006 à 15:46:20

                        Ouais enfin l'anglais ça me dérange pas mais dès que c'est technique (et ça ne peut manquer de l'être pour du C) je suis pas sûr de tout piger !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          11 juin 2006 à 15:51:36

                          Citation : Pierre89

                          Merci de ton aide -ed- ! :-°


                          Désolé d'essayer de t'aider 'vraiment' et pas sour la forme d'un assistanat stérile...

                          Citation : Sagesse chinoise

                          "Donne un poisson à un homme, il mangera une journée."
                          "Apprend lui à pécher, il mangera toute sa vie."


                          Citation : Pierre89

                          Je n'ai pas de livre de C


                          C'est un tord. Le langage C ça ne tombe pas du ciel...

                          Citation : Pas de titre


                          Je ne connais pas d'aide en ligne.


                          Ca dépend de ton environnement de développement... (man, F1 etc.)

                          Citation : Pas de titre


                          Et sur developpez j'ai jamais vraiment compris leur organisation.


                          o_O Le lien que je t'ai passé est on ne peut plus direct. C'est un moteur de recherche. Tu mets le nom de la fonction et ça te donne le mode d'emploi en français...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            11 juin 2006 à 16:07:30

                            Merci de l'explication pour developpez.

                            Citation : -ed-


                            C'est un tord. Le langage C ça ne tombe pas du ciel...


                            Pour moi le C est un divertissement passionnant, mais pas une passion, je n'ai donc pas pris le temps de regarder et d'acheter un livre sur le C. (le livre sur le C++ était au départ pour apprendre le C++ mais comme je l'ai dit il est mal fait pour un débutant et j'ai découvert le SdZ par la suite)

                            Citation : -ed

                            Ca dépend de ton environnement de développement... (man, F1 etc.)


                            Qu'appelle tu environnement de développement ?
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              11 juin 2006 à 16:11:19

                              Il y a des livres en ligne hein... moi j'en ai trouvé un sur le C++, il est bien fait, après y'a le site de -ed- (l'idole des zér0s ^^ ) ou on trouve forcément son bonheur (d'ailleurs je vai vérifier que le livre en C++ venait de là...)
                              Edit: ben non rapé
                              Après environnement de développement, c'est Dev-cpp, Code::Blocks, MS Visual Studio, éditeur de texte+gcc....
                              • Partager sur Facebook
                              • Partager sur Twitter
                                11 juin 2006 à 16:11:34

                                Citation : Pierre89

                                Pour moi le C est un divertissement passionnant, mais pas une passion, je n'ai donc pas pris le temps de regarder et d'acheter un livre sur le C.


                                Regarde le site d'-ed- tu n'es pas obligé d'acheter un livre. :D

                                Citation : site d'-ed-

                                Spécial étudiant fauché. Voici un bon livre de C gratuit en anglais The C Book avec exercices et corrigés, sans oublier le tutoriel en français de Bernard Cassagne, et le cours avancé d'Anne Canteaut.



                                Citation : Zulon

                                -ed- (l'idole des zér0s ^^ )

                                ??
                                • Partager sur Facebook
                                • Partager sur Twitter
                                Anonyme
                                  11 juin 2006 à 16:14:27

                                  Oh c'était pour rire hein...
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    11 juin 2006 à 16:15:29

                                    Citation : Zulon

                                    Oh c'était pour rire hein...


                                    Ne le prend pas mal...

                                    Mais je trouve plutôt absurde de trouver chaque personne actif du site comme un dieu.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Anonyme
                                      11 juin 2006 à 16:16:52

                                      Sans blague? Tu me prends pour un idiot?
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        11 juin 2006 à 16:19:25

                                        On se calme hein !!! :D

                                        Pis Zulon a le droit d'être admiratif devant des personnes maîtrisant un sujet assez parfaitement !
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          11 juin 2006 à 16:19:30

                                          Citation : Zulon

                                          Sans blague? Tu me prends pour un idiot?


                                          Je parle en général hein.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Anonyme
                                            11 juin 2006 à 16:21:35

                                            Je sais bien que même si -ed- "maîtrise" bien le C, ce n'est pas pour autant un dieu...
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              11 juin 2006 à 19:31:58

                                              Bonjour bonjour les gens :D
                                              J'aimerais maintenant juste vider une variable char de son contenu
                                              j'ai fais un for i... et : variable[i]="";
                                              C'est pas bon ca remplace les caracteres par des notes de musiques...

                                              Comment faire ? (j'ai chercher alors ne me dites pas le contraire :p)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                11 juin 2006 à 19:34:17

                                                Il ne faut pas remplacer tous les caractères de la chaine par "", le dernier caractère doit être '\0'. C'est peut-être pour ça.
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  11 juin 2006 à 19:35:42

                                                  Tu veux la remplir de 0, ou la vider ?
                                                  Parce que pour vider une chaine, variable[0] = '\0'; c'est rapide et efficace ;)
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    11 juin 2006 à 19:36:47

                                                    Vider :)
                                                    pour vider le pointeur je fais comment >?
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      11 juin 2006 à 19:37:04

                                                      Comment ça ?

                                                      vider, tu veux dire "free" ?
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        11 juin 2006 à 19:37:39

                                                        C'est pas un malloc.
                                                        En fait je veux que mon char n'ai aucune valeur mais qu'il existe en mémoire toujours :)ca marche pour le char maintenant je veux que le pointeur soit "vidé" mais qu'il exieste en mémoire !
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                          11 juin 2006 à 19:38:49

                                                          Bah str[0] = '\0'; alors.

                                                          Mais tu parles d'un char (une lettre) ou d'une chaine (un pointeur vers des lettres) ?
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            11 juin 2006 à 19:39:03

                                                            ben il me semble que bluestorm viens de te donner la solution

                                                            chaine[0] = '\0';
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              11 juin 2006 à 19:40:08

                                                              Vider un pointeur :

                                                              p = NULL;

                                                              non ?
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              fgets

                                                              × 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