Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comment declarer une variable de texte et l'afficher

    11 décembre 2005 à 18:11:51

    bonjour

    je sais qu'il y des topic a ce sujet mais je n'ai rien compris a ce que les gens expliquaient donc je vous demande comment declarer une variable de texte en C et l'afficher a l'ecran

    merci
    • Partager sur Facebook
    • Partager sur Twitter
      11 décembre 2005 à 18:30:26

      Char tavar;
      printf("Tapez un texte : \n"); // On demande a l'utilisateur de rentrer un texte
      scanf("%c", &tavar);// On le récupère sous la forme d'un caractère et on le place dans "tavar"
      printf("Tavar est : %c  \n", tavar); // Puis on l'affiche en métant le "%c"


      Voili voila, je l'ai tapé sans ouvrir dev-cpp donc cpossible qu'il y ai des fautes, m'enfin :-°
      • Partager sur Facebook
      • Partager sur Twitter
        13 décembre 2005 à 15:38:08

        Hello tout le monde.
        Vous etes marrant mais si j ai bien compris la question, on voulait savoir comment faire tapper un texte a l utilisateur et pouvoir resortir ce texte. C est ca? (si c est pas ca ben voila une question a laquel j aimerais bien nue reponse :D )
        Avec ton exemple :

        char tavar;
        printf("Tapez un texte : \n"); // On demande a l'utilisateur de rentrer un texte
        scanf("%c", &tavar);// On le récupère sous la forme d'un caractère et on le place dans "tavar"
        printf("Tavar est : %c  \n", tavar); // Puis on l'affiche en métant le "%c"

        Un ca me reprend que la premiere lettre de mon texte...
        deux: char s ecrit avec un petit "c" pas de majuscule :-°
        @++<code></code>
        • Partager sur Facebook
        • Partager sur Twitter
          13 décembre 2005 à 15:44:29

          Si tu ve afficher un texte variable plus long, tu utilise : %s.
          Ainsi tu poura afficher une chaine de caractere au lieu d'un seul. :D

          Pour plus de clairetee j'ai repris le code si dessu :)
          char *tavar;  // On rajoute une * pour signaler que c'est un pointeur.
          printf("Tapez un texte : \n"); // On demande a l'utilisateur de rentrer un texte
          scanf("%s", &tavar);// On le récupère sous la forme d'un chaine de caractere et on le place dans "tavar"
          printf("Tavar est : %s  \n", tavar); // Puis on l'affiche en métant le "%s"
          • Partager sur Facebook
          • Partager sur Twitter
            13 décembre 2005 à 15:53:59

            Merci Hexapode. ;)
            Ca m aura ete utile...
            LoL
            @++ tout le monde
            • Partager sur Facebook
            • Partager sur Twitter
              13 décembre 2005 à 15:57:37

              Pourquoi mon code va pas :(

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

              int main(int argc, char *argv[])
              {
                char compteEnBanque = 6500;
                char reponse;
               
                printf("Vous avez %d euros sur votre compte\n", %compteEnBanque);
                printf("Voulez vous vider votre compte ? (oui-non) \t");
                scanf("%c, &reponse");
                   if(reponse == 'oui')
                   {
                   compteEnBanque = 0;
                   printf("\nVous avez %c euros sur votre compte\n", compteEnBanque);
                   }
                   if(reponse = 'non')
                   {
                   printf("\nOk bonne journer\n\n");
                   }
                   else
                   {
                   printf("\nErreur, oui ou non\n\n");
                   }
               
                system("PAUSE");     
                return 0;
              }
              • Partager sur Facebook
              • Partager sur Twitter
                13 décembre 2005 à 15:57:39

                Par contre pour les phrases trop longues il y a un risque d'erreur. Pour faire prope, il faudrait declarer le char* comme ca :

                char ma_var[x];

                ou x est lenombre max de caractere que tu pense que l'utilisateur va rentrer.
                Sinon ya un risque de segmentation fault ou de bsd (sous windows :D)

                Edit : silver Eror :

                tu as un % de trop en ligne 9 (premier printf...)

                Edit 2 :

                code debudgge :


                char tavar[50]; // on indique que 50 espaces memoire doivent etre reserves.
                printf("Tapez un texte (max 50 caracteres): \n"); // On demande a l'utilisateur de rentrer un texte
                scanf("%s", &tavar);// On le récupère sous la forme d'un chaine de caractere et on le place dans "tavar"
                printf("Tavar est : %s  \n", tavar); // Puis on l'affiche en métant le "%s"
                • Partager sur Facebook
                • Partager sur Twitter
                  13 décembre 2005 à 16:05:50

                  Merci hexapode mais cetait une erreur de copier coller :p
                  VOila corriger :
                  #include <stdio.h>
                  #include <stdlib.h>

                  int main(int argc, char *argv[])
                  {
                    char compteEnBanque = 6500;
                    char reponse;
                   
                    printf("Vous avez %d euros sur votre compte\n", compteEnBanque);
                    printf("Voulez vous vider votre compte ? (oui-non) \t");
                    scanf("%s, &reponse");
                       if(reponse == 'oui')
                       {
                       compteEnBanque = 0;
                       printf("\nVous avez %s euros sur votre compte\n", compteEnBanque);
                       }
                       if(reponse = 'non')
                       {
                       printf("\nOk bonne journer\n\n");
                       }
                       else
                       {
                       printf("\nErreur, oui ou non\n\n");
                       }
                   
                    system("PAUSE");     
                    return 0;
                  }


                  Le programme ce lance mais je pense que les conditions ne fonctionne pas
                  • Partager sur Facebook
                  • Partager sur Twitter
                    13 décembre 2005 à 16:12:33

                    Je te conseil tout de meme de declarer un tableau de char, avec une taille definie.
                    Cela afin d'eviter les erreurs de gestion de memoire.

                    Seul probleme, tu ne peu pas empecher l'utilisateur de tapper plus caracteres que tu en a indique dans le tableau : Pour cela met un limite (tres) eleve affin d'empecher les erreurs.

                    Sinon une autre technique plus prope serait de faire un read sur la sortie standart, lettre par lettre. Mais c'est un petit peu plus complique.
                    plus d'info sur les gestions de texte avancees ici :
                    http://www.siteduzero.com/forum-83-3265-c-quelques-fonctions-utiles.html

                    (note : je fais ma pub pour ce tuto qui ne sera jamais accepte car je ne peu pas mettre d'accents :().
                    • Partager sur Facebook
                    • Partager sur Twitter
                      13 décembre 2005 à 16:13:05

                      Hexapode.
                      Ton dernier printf ca doit etre un "%s" et non un "%c".
                      :D
                      @++
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Anonyme
                        13 décembre 2005 à 16:13:20

                        Seulement là vous allez avoir un problème énorme.

                        a) Qu'est-ce que la mémoire -> vous êtes sensés le savoir (ai pas lu le cours de m@téo mais il doit être bien. Nan ? Si bien sûr.)

                        b) Alors quel est le rapport : lorsque vous ne désirez stocker qu'un seul nombre, vous pouvez vous permettre de faire int x, long y, des trucs comme ça. Votre programme sera conçu de telle façon à ce qu'il se dise "Alors... j'ai un entier là, un long ici, ils sont à moi". Et c'est vrai, les x et y appartiennent au programme, ils ont une certaine place en mémoire qui leur est réservée.

                        Lorsque qu'on ne veut stocker qu'un seul caractère, c'est la même chose. Vous pouvez faire char c, et automatiquement on a ce qui faut de réservé en mémoire.

                        Mais pour les chaînes de caractères, c'est différent. En effet, dans "chaîne de caractères", il y'a un 's' à "caractère", tout simplement parce qu'il y'en a plusieurs.

                        Mais comment sont-ils stockés, ces caractères ? De la manière la plus normale qui soit : un par un. Par exemple, si votre chaîne est "Bonjour", vous aurez d'abord 'B' puis 'o' puis 'n'... jusqu'à 'r'. De plus, pour des raisons pratiques (pour que le programme, lorsqu'il s'exécute, n'ai pas à toujours connaître la taille de cette chaîne) on trouve le caractère spécial '\0' (c'en est un seul, pas deux, c'est une forme spéciale) qu'on appelle "null". Lorsque vous affichez une chaîne avec printf par exemple, printf va parcourir votre chaîne en affichant un par un tous les caractères, jusqu'à ce qu'il rencontre '\0'.

                        Notez que quand vous demandez une chaîne à l'utilisateur avec scanf, ce dernier mettra automatiquement le caractère '\0' à la fin.

                        Donc en mémoire votre chaîne, c'est 'B', 'o', 'n', 'j', 'o', 'u', 'r' '\0' soit 8 emplacements. Et là, il y'a un problème : c'est que ça aurait tout aussi bien pu être "Salut" à la place de "Bonjour", dans quel cas on n'aurait eu que 6 emplacements (5 lettres plus la fin). Ou à la place, "Hello, comment va ?". Si c'est votre programme, vous mettez bien sûr ce que vous voulez, mais si c'est l'utilisateur qui rentre ?

                        Il est nécessaire, vraiment, en C, de savoir ce que vous faites avec la mémoire. Dans ce cas, il est très important de faire attention à ce que l'utilisateur ne prenne pas plus de place que vous avez cru. Que se passe-t'il sinon ? Hé bien scanf est très bête, et continue de stocker la chaîne après la limite. Donc au lieu d'avoir un beau programme avec une belle chaîne entourée de belles variables, vous avez un programme laid et qui plante parce qu'il stocke des chaînes par dessus les variables.

                        Pour stocker des chaînes, vous devrez donc penser à utiliser des groupes de plusieurs caractères, que l'on appelera "tableaux". Pour un tableau de caractères, on fait comme ça :

                        char chaine[TAILLE_DE_LA_CHAINE];

                        ce qui vous réservera une chaîne entière de la taille de TAILLE_DE_LA_CHAINE, et dont vous pourrez utiliser tout sauf le dernier caractère, réservé pour le '\0'. C'est très important. Après, vous pouvez utiliser scanf pour qu'il remplisse ce tableau avec les données de l'utilisateur, mais... si l'utilisateur rentre plus de données qu'il ne devrait, voilà ce qui arrive :


                        #include <stdio.h>

                        main()
                        {
                        char foo[10];
                        scanf("%s", &foo);
                        printf("%s\n", foo);
                        }


                        Vous voyez, ici on réserve 10 caractères seulement pour foo. Voilà ce qui se passe. D'abord on rentre "Bonjour", qui est suffisamment petite pour tenir. Puis on rentre un autre message, un peu trop long, et notre programme ne plante pas mais ne stocke qu'une partie de la chaîne. Enfin, on rentre un truc trop long, et là, un message (ici "Segmentation Fault") apparaît. Il est envoyé par le système pour dire que ça n'a pas marché (sous Windows peut-être que vous avez un truc du genre "Le programme a rencontré une instruction non conforme" etc...)

                        Minipingouin:~/progs poulet$ ./foo.prog
                        Bonjour
                        Bonjour
                        Minipingouin:~/progs poulet$ ./foo.prog
                        Bonjour moi c'est Arthur et cette chaine est trop longue !
                        Bonjour
                        Minipingouin:~/progs poulet$ ./foo.prog
                        Bonjour moi c'est Arthur et cette chaine est vraiment trop longue d'ailleurs je me demande si mon programme ne va pas planter....... ?
                        Segmentation fault


                        EDIT : J'espère que je suis clair... c'est pas évident à comprendre.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          13 décembre 2005 à 16:16:39

                          Citation : Heskan

                          Hexapode.
                          Ton dernier printf ca doit etre un "%s" et non un "%c".
                          :D
                          @++



                          merci, c'est corrige...

                          Citation : Bigloo


                          Seulement là vous allez avoir un problème énorme.



                          Ca je sais, c'est pour cela que je proposait une alternative.

                          Mais peut etre que je devrais rediger qqch sur la gestion de memoire (malc, free...)
                          a voir.
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Anonyme
                            13 décembre 2005 à 16:29:04

                            "
                            Ca je sais, c'est pour cela que je proposait une alternative. "
                            -> A vrai dire, j'ai commencé à rédiger le truc avant que tu postes le tiens et j'ai pas rafraichi pour voir si quelqu'un avait répondu.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              13 décembre 2005 à 16:30:10

                              Je m'en etait rendu compte. Dsl de t'avoir grille.
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Comment declarer une variable de texte et l'afficher

                              × 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