Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit probleme Char

Sujet résolu
    16 janvier 2006 à 21:18:57

    Hello tous !
    Je vous explique très vite:
    J'ai fais un petit logiciel et un moment donner je récupert une saisie %s. Puis je lui remet en pleine face qlq minutes apres ^^:-° Mais le problème est que si il met: 'Pensez à passer l'aspirateur' le message serra: 'Pensez', mais s'il met: 'Pensezapasserl'aspirateur' le message serra: 'Pensezapasserl'aspirateur'.

    Voilà, il prends mes espaces ;) si vous avez une solution!
    ++
    • Partager sur Facebook
    • Partager sur Twitter
      16 janvier 2006 à 21:24:24

      a tout hasard je pense qu'il faut savoir utiliser les chaines de caractères pour pouvoir faire ca :)
      mais en fete j'en sais rien :-°
      • Partager sur Facebook
      • Partager sur Twitter
        16 janvier 2006 à 21:26:27

        Non c'est ce qu'il a fait sinon il aurait juste prit le "P" ;)
        Mais je ne sais pas pour les espaces...
        • Partager sur Facebook
        • Partager sur Twitter
          16 janvier 2006 à 21:26:36

          A première vue c'est un problème bizarre, mais de toutes façons sans ton code on ne peut rien dire, on ne sait pas comment tu gêres cette chaîne de caractères, si tu fais du C ou du C++, etc...
          • Partager sur Facebook
          • Partager sur Twitter
            16 janvier 2006 à 21:28:28

            Utilise fgets(). %s dans scanf ça prend un mot, fgets() prend une ligne. gets() est à bannir dans 99,9% des cas. Sans autres indications je considère que tu fais du C.
            • Partager sur Facebook
            • Partager sur Twitter
              16 janvier 2006 à 21:33:56

              char message[251];
              printf("\nQuel message voulez-vous mettre?\n");
                   scanf("%s", &message);

              printf("Message: %s\n", message);


              Voilà en gros ;)
              Les gets(); puts(); je ne les utilises plus car m'ont jouer un mauvais tour :D
              • Partager sur Facebook
              • Partager sur Twitter
                16 janvier 2006 à 21:35:13

                C'est justement ton code qui bug chez lui ^^ la méthode de rzO est la bonne.
                EDIT : tiens Gambit2029 : ICI tu peux savoir comment utilisé la méthode de rzO
                • Partager sur Facebook
                • Partager sur Twitter
                  16 janvier 2006 à 21:38:46

                  char bar[L_MESSAGE];
                  fgets(bar, L_MESSAGE, stdin);
                  bar[strlen(bar) - 1] = '\0';
                  • Partager sur Facebook
                  • Partager sur Twitter
                    16 janvier 2006 à 21:39:40

                    comment on fait pour ressortir la phrase après dans un printf par exemple :euh:

                    EDIT: c'est bon. merci a Willy_Paper
                    • Partager sur Facebook
                    • Partager sur Twitter
                      16 janvier 2006 à 21:41:00

                      Sinon tu peux faire en C++
                      #include <iostream.h>
                      #include <string.h>
                      int main()
                      {
                      char message[250+1];
                      cin>>message;
                      cout<<"message:"<<message<<"\n";
                      }
                      • Partager sur Facebook
                      • Partager sur Twitter
                        16 janvier 2006 à 21:41:07

                        Outch ^^ désolé mais c'est assez hard mais je pense que c'est:
                        1- déclaration
                        2- demande
                        3- envoi

                        ?? si oui a quoi correspond le L_MESSAGE?? sachant que je veux qu'il s'appel message?? merci

                        luke: je fais du C pas C++ merci qd meme ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 janvier 2006 à 21:43:09

                          Luke => ça ne marche pas :euh:
                          Gambit2099 =>
                          par exemple tu fais ça :
                          char var[100];
                          fgets(var, 100, stdin);
                          var[strlen(var) - 1] = '\0';
                          printf("%s\n",var);
                          • Partager sur Facebook
                          • Partager sur Twitter
                            16 janvier 2006 à 21:44:50

                            Willy: d'accord mais où ce place le var[strlen(var) - 1] = '\0';

                            toujours apres le fgets?
                            • Partager sur Facebook
                            • Partager sur Twitter
                              16 janvier 2006 à 21:45:31

                              L_MESSAGE tu remplaces par la taille du tampon, c'est juste une "constante symbolique", tu verras ça avec les macros plus tard. Le bar[...] = '\0' ça sert à enlever le caractère "fin de ligne" qui est lu... en fin de ligne, pour avoir une phrase propre. ;)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                16 janvier 2006 à 21:45:50

                                Oki Rz0 Thx ;)

                                Edit: sa ne marche toujours pas :p il me saute la demande ^^
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  16 janvier 2006 à 21:50:41

                                  Je n'ai pas compris l'utilité du :
                                  var[strlen(var) - 1] = '\0';

                                  car ça marche sans apparament :euh:
                                  EDIT : Merci rzO
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    16 janvier 2006 à 21:53:47

                                    En gros voilà ce que j'ai:

                                    char message[250]
                                    // bla bla bla

                                    printf("\nQuel message voulez-vous mettre?\n");
                                         fgets(message, 250, stdin);
                                         message[strlen(message) - 1] = '\0';

                                    // etc etc
                                    // encore et encore ^^

                                    printf("Message: %s\n", message);
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      16 janvier 2006 à 21:54:37

                                      Le fgets ne rajoute pas le caractére de fin \0 qu'on doit le rajouter à la main ?

                                      EDIT : A ok ça enlève les restes du Buffer suite au passage du scanf
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        16 janvier 2006 à 21:54:42

                                        Gambit2099 > Je devine que c'est parce que tu as utilisé scanf avant ; le fait est que scanf laisse les caractères \n dans le buffer, donc quand fgets passe, il tombe dessus et boum. C'est pour ça que ça pue d'utiliser scanf pour ce que tu en fais. ;)
                                        Regarde la FAQ sur "comment enlever les restes de scanf"

                                        Willy_Paper > Comme je l'ai dit, ça sert à enlever le \n qui traine à la fin de la ligne pour que ce soit plus esthétique si tu veux afficher ta phrase après, c'est tout.

                                        tebonb > Bah si, regarde ma réponse au-dessus. ;) S'il n'y avait pas de \0, on ne pourrait pas appeler strlen.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          16 janvier 2006 à 21:57:34

                                          Rz0 : en plein dedans oui j'en utilisais un XD
                                          Sinon j'ai lu la FAC mais euh...

                                          void
                                          cleanscan(void)
                                          {
                                                  int c;
                                                  do
                                                          c = getchar();
                                                  while (c != '\n' && c != EOF);
                                          }


                                          Edit: j'ai compris comment l'envoyer et l'utiliser mais sa ne marche tjr pas :(
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            16 janvier 2006 à 22:15:28

                                            Exemple du genre de :

                                            #include <stdio.h>

                                            #define L_MSG 80

                                            void
                                            cleanscan(void)
                                            {
                                                    int c;
                                                    do
                                                            c = getchar();
                                                    while (c != '\n' && c != EOF);
                                            }

                                            int
                                            main(void)
                                            {
                                                    int x;
                                                    char msg[L_MSG];
                                                    scanf("%d", &x);
                                                    cleanscan();
                                                    /* ... */
                                                    printf("Entrez un message :\n");
                                                    fgets(msg, L_MSG, stdin);
                                                    msg[strlen(msg) - 1] = '\0';
                                                    /* ... */
                                                    printf("%s", msg);
                                            }


                                            Conseil perso : arrête d'utiliser scanf, utilise fgets/atoi/atof si tu veux récupérer des entiers. Tu récupères toujours une chaîne de caractères comme ça avec fgets() (pas forcément besoin d'enlever le \n si ce n'est pas pour écupérer une phrase) et après tu appelles atoi ou atof dessus.

                                            int x;
                                            char bar[L_BAR];
                                            fgets(bar, L_BAR, stdin);
                                            x = atoi(bar);

                                            double x;
                                            char bar[L_BAR];
                                            fgets(bar, L_BAR, stdin);
                                            x = atof(bar);

                                            Voilà tout.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              16 janvier 2006 à 22:29:48

                                              Au début je ne comprennais pas ce que
                                              int x;
                                              venait faire là mais j'ai compris que c'était un exemple ^^

                                              Sinon merci bcp ca marche impec :)
                                              Merci Rz0 et à tout le monde qui est venu en mon aide lorsque j'en ai eu besoin ;)

                                              Note: vous y faites pas trop je reviendrais avec d'autres bugs
                                              *cours en riant d'un air démoniaque* ;)
                                              • Partager sur Facebook
                                              • Partager sur Twitter

                                              Petit probleme Char

                                              × 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