Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] mon code marche pas => recuperer une chaine

J'ai plusieurs question à vous poser !

Sujet résolu
    12 mars 2006 à 13:51:38

    BOnjour tout le monde !!
    Avant de vous faire profiter de mon code , je vais énoncer mes problemes !

    I : Récuperer une chaine de caractere !


    Comment fait-on pour récuperer une chaine de caracetere via une fonction ?
    Je m'explique , dans un TP mateo a mis une fonction lireCaractere()
    , et bien moi , je voudrais une fonction qui renvoie un tableau de char !
    Est'ce possible ? si oui comment ?

    II un bug ? avec windows ?

    Ah , deuxieme probleme , dans le code ci-dessous , lorsque je tape mon age , il met :

    Citation : Erreur

    store.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.


    III le code


    #include <stdio.h>
    #include <stdlib.h>
    #include "Perso.h"
    #include <string.h>
    char lireChar()
    {
       getchar();
        char caractere = 0;
         // On lit le premier caractère
          caractere = getchar();
        //On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
       while(getchar() != '\n')
          {
          }
        return caractere; // On retourne le premier caractère qu'on a lu
    }
    int lireInt()
    {
        getchar();
        int caractere = 0;
        scanf("%ld"‚&caractere);
        // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
        while (getchar() != '\n');
        return caractere; // On retourne le premier caractère qu'on a lu
    }

    int main()
    {
        printf("== Bienvenue dans LiveSimulation ==\n");
        printf("Avez vous deja jouer a ce jeu ?(o/n)");
        char deja_jouer = fgetc(stdin);
        if(deja_jouer == 'o')
        {
            // on joue
            printf("Tres bien alors contiuons la partie !");
        }
        else
        {
            // on "inscrit le perso"
            printf("Bien‚ alors je vais vous expliquer le principe du jeu\n");
            printf("Vous etes une personne qui vit dans une ville avec un appartement etc...\n");
            printf("Vous menez une vie tranquille et vous perdez lorsque vous n'est plus en bonne sante ou lorsque vous n'avez plus d'argent! \n");
            printf("Cependant ‚ nous allons d'abord vous posez quelque question !\n");
            Pers *p= NULL;
            /* ============= SEXE ============*/
            printf("Preferez vous etre un homme ou une femme (h/f)?");
            char sexe = lireChar();
            if(sexe == 'h')
                p–>sexe = MASCULIN;
            else if(sexe == 'f')
                p–>sexe == FEMININ;
            else
                printf("Vous n'exister pas dans notre monde !\n");
            /* ============= AGE ============*/
            printf("\nQuel age avez vous ?");
            int age = lireInt();
            if(age > 50) p–>sexe = VIEUX;
            else if(age < 20) p–>sexe = JEUNE;
            else p–>sexe = MOYEN;
            /* ============= NOM ============*/
            printf("\nQuel est votre nom ?");
            scanf("%s"(*p).nom);

            /* ============= Prenom ============*/
        }
        return 0;
    }

    les structures
    typedef enum sexe Sexe;
    enum sexe
    {
        MASCULIN‚FEMININ
    };
    typedef enum age Age;
    enum age
    {
        JEUNE‚VIEUX‚MOYEN
    };
    typedef enum sante Sante;
    enum sante
    {
        AGONI‚PLEINE_FORME‚FATIGUE‚NORMAL‚MORT‚DORT
    };
    typedef enum lieu Lieu;
    enum lieu
    {
        MAGASIN‚STADE‚MAISON
    };
    typedef struct perso Pers;
    struct perso
    {
       Sexe sexe;
       Age age;
       char* nom;
       char* prenom;
       long argent;
       Sante sante;
       Lieu lieu;
    };
    • Partager sur Facebook
    • Partager sur Twitter
      12 mars 2006 à 13:53:40

      Pour récupérer une chaine de caractere, tu peux faire :

      char *recuperer_char();
      • Partager sur Facebook
      • Partager sur Twitter
        12 mars 2006 à 14:07:05

        comme ca
        char *recuperer_char()
        {
           getchar();
            char* caractere = NULL;
            scanf("%s"‚caractere);
            // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
            return caractere; // On retourne le premier caractère qu'on a lu
        }

        sinon ya toujours le BUG !
        • Partager sur Facebook
        • Partager sur Twitter
          12 mars 2006 à 14:08:05

          Citation : NarTy

          et bien moi , je voudrais une fonction qui renvoie un tableau de char !



          Impossible.
          • Partager sur Facebook
          • Partager sur Twitter
            12 mars 2006 à 14:12:32

            Citation : NarTy

            comme ca

            char *recuperer_char()
            {
               getchar();
                char* caractere = NULL;
                scanf("%s"‚caractere);
                // On lit les autres caractères mémorisés un à un jusqu'à l'\n (pour les effacer)
                return caractere; // On retourne le premier caractère qu'on a lu
            }

            sinon ya toujours le BUG !


            Oui, normalement ça fonctionne.
            • Partager sur Facebook
            • Partager sur Twitter
              12 mars 2006 à 14:49:54

              mais apres ,
              Comment je fais pour afficher la chaine
              comme ca ?
              printf("\nQuel est votre nom ?");
                      p–>nom = recuperer_char();
                      printf("%s"‚p–>nom);

              POur ce qui est du bug quelqu'un a une idee ?


              Je me repete : store.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.
              C'est l'erreur courante de windows lorsque un programme merde !
              • Partager sur Facebook
              • Partager sur Twitter
                12 mars 2006 à 14:54:01

                Ca ça fonctionnera très bien :

                char texte[100];

                texte = recupere_char();
                printf("%s"‚ texte);
                • Partager sur Facebook
                • Partager sur Twitter
                  12 mars 2006 à 15:00:23

                  Citation : NarTy


                  I : Récuperer une chaine de caractere !


                  Comment fait-on pour récuperer une chaine de caracetere via une fonction ?



                  Il y a deux façons correctes de le faire
                  • Passer l'adresse d'un tableau de char et sa taille de façon à pourvoir éviter les débordements, comme avec fgets(), par exemple.
                  • Retourner l'adresse d'un bloc alloué par malloc(), comme le fait la fonction POSIX.1 strdup(). L'utilisateur doit alors vérifier si l'adresse est non NULL et libérer le bloc quand il ne l'utilise plus. (free()).

                  Citation : NarTy


                  deuxieme probleme , dans le code ci-dessous , lorsque je tape mon age , il met :<citation nom="Erreur">store.exe a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.


                  C'est assez typique d'un comportement indéfini sous Windows. (Par exemple, pointeur mal utilisé)
                  Dans lireInt(), je vois :

                  Citation : NarTy



                      int caractere = 0;
                      scanf("%ld"‚&caractere);



                  Ce code est incorrect. "%ld" attend l'adresse d'un long et non celle d'un int.

                  D'autre part :

                  Citation : NarTy



                  <...>
                          Pers *p= NULL;
                  <...>
                          scanf("%s"(*p).nom);
                  <...>



                  p n'ayant pas une valeur valide, lire p->nom (une façon simple d'écrire (*p).nom) invoque un comportement indéterminé.
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    12 mars 2006 à 18:53:16

                    Merci , mes j'ai toujours une erreur !

                    J'ai corrigé pour le type INT , mais pour ce qui est de
                    Pers *p = NULL;

                    Comment résoudre ce probleme ! Est-il correct ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      12 mars 2006 à 19:10:40

                      Citation : NarTy

                      J'ai corrigé pour le type INT


                      Rien de tel en C, tu veux sans doute dire int...

                      Citation : NarTy

                      , mais pour ce qui est de

                      Pers *p = NULL;


                      Comment résoudre ce probleme

                      En définissant une instance de la structure. Quelle raison t'as poussé à définir un pointeur ?
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        12 mars 2006 à 19:14:31

                        d'accord , donc d'apres toi , je dois faire comme ceci :
                        Pers p;
                                printf("\nQuel est votre nom ?");
                                p.nom = recuperer_char();
                                printf("%s"‚p.nom);


                        PS : qu'est ce que ca veut dire ca : main.c:40: warning: assignment makes pointer from integer without a cast
                        • Partager sur Facebook
                        • Partager sur Twitter
                          12 mars 2006 à 19:35:33

                          Citation : NarTy

                          d'accord , donc d'apres toi , je dois faire comme ceci :

                          Pers p;
                                  printf("\nQuel est votre nom ?");
                                  p.nom = recuperer_char();
                                  printf("%s"‚p.nom);



                          Moui, mais il manque des éléments.
                          • Que fait 'recuperer_char()'
                          • Quel est le type retourné de recuperer_char()
                          • C'est un drole de nom si elle recupère une chaine...
                          • Quel est le type de p.nom ?

                          Citation : NarTy


                          PS : qu'est ce que ca veut dire ca : main.c:40: warning: assignment makes pointer from integer without a cast


                          Que du cherches à mettre une valeur de type 'adresse' dans une variable de type entier, ce qui est évidemment une anerie...
                          • Partager sur Facebook
                          • Partager sur Twitter
                          Music only !
                            12 mars 2006 à 19:43:30

                            J'ai résolu le probleme , merci à tous !
                            • Partager sur Facebook
                            • Partager sur Twitter

                            [C] mon code marche pas => recuperer une chaine

                            × 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