Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de mémoire avec le Mini-exo de "creer ses propres variables"

...message d'erreur

Sujet résolu
    28 juin 2006 à 20:58:01

    Bonsoir à tous les Zéros :p ,
    nous avons j'ai un probleme (comment celà se fasse-t-il ? o_O )

    En fait vous savez dans le chapitre "Creez vos propres types de variables" , dans la sous-partie
    "Utilisation d'une structure" et au dessus du titre 'Initialiser une structure' , M@teo nous donne un exercice (je ne vais pas le détailler, si vous voulez des informations dessus, elles sont indiquées dans l'énoncé).

    J'ai essayé de le faire, malheuresement, un probleme m'est survenu :


    Image utilisateur

    Je vous donne le code de mon 'Main.c' :


    #include <stdio.h>
    #include <stdlib.h>    //Directives de préprocesseur
    #include "main.h"

    int main(int argc, char *argv[])
    {
      Joueur player[2]// Déclaration d'un tableau de 2 variable player de type 'Joueur'

      long i;
     
      for(i=0; i<2; i++)
      {
             printf("\n\n");
             printf("Tapez votre nom : ");
             scanf("%s", player[i].nom);
             
             printf("\n\nTapez votre prenom : ");
             scanf("%s", player[i].prenom);
             
             printf("\n\nTapez votre adresse (que des lettres) : ");
             scanf("%s", player[i].adresse);
             
             printf("\n\nTapez votre age : ");
             scanf("%ld", player[i].age);
             
             printf("\n\nDonnez votre sexe (1 pour un garcon, 0 pour une fille) : ");
             scanf("%ld", player[i].garcon);
             
             printf("Vous vous appelez : %s %s , vous habitez %s , vous avez %ld ans", player[i].prenom, player[i].nom, player[i].adresse, player[i].age);
      }
     
     
      printf("\n\n\n");
      system("PAUSE");     
      return 0;
    }


    Mon 'Main.h' :


    typedef struct Joueur Joueur;
    struct Joueur
    {
           char nom[45];
           char prenom[45];
           char adresse[100];
           long age;
           int garcon; //1 si garcon, 0 si fille
    };


    Et au moment de donner le sexe du joueur, le message d'erreur survient :


    Tapez votre nom : Fragnant

    Tapez votre prenom : Boris

    Tapez votre adresse (que des lettres) : Toulon

    //Je précise que si je met des espaces dans la réponse, le programme saute des demande de frappe de caractere, POURQUOI ???

    Tapez votre age : 42

    Donnez votre sexe (1 pour un garcon, 0 pour une fille) : 1

    //Survient l'erreur !!


    N.B : Remarquez les 2 commentaires dans la console
    • Partager sur Facebook
    • Partager sur Twitter
      28 juin 2006 à 21:03:39

      Pour ton erreur tu as oublié le & lorsque tu demande le sexe :)

      Pour l'autre erreur avec les espace essai de vider le buffer :) (il y avait une fonction pour ça qui circulait :) il faut chercher je l'ai plus ^^ )
      • Partager sur Facebook
      • Partager sur Twitter
        28 juin 2006 à 21:04:41

        A scanf tu dois passer des pointeurs
        player[i].garcon n'est pas un pointeur mais un int, par contre ça aurait déjà du buggé quand tu demande l'age...

        Pour les espaces ça n'a pas de rapport avec le buffer c'est parce que scanf considère l'espace comme un separateur, je sais plus comment on fait pour qu'il le slise quand même...
        • Partager sur Facebook
        • Partager sur Twitter
          28 juin 2006 à 21:13:01

          ah bein oui, c'est vrai, puisque ce n'est pas un tableau.. mais il faut que je le mette à 'player[i].age' aussi alors ?!

          Edit : Merci à vous pour le probleme, j'avais completement oublié :D .

          Et si quelqu'un à une autre solution au probleme des espaces, qu'il se fasse plaisir ;)^^
          • Partager sur Facebook
          • Partager sur Twitter
            28 juin 2006 à 21:16:34

            il faut mettre des & devant tout tes scanf
            • Partager sur Facebook
            • Partager sur Twitter
              28 juin 2006 à 21:20:08

              Non harry, pas tous, mais juste ceux qui ne sont pas des 'tableaux', mais Merci quand même :D

              PS : Il ne reste plus que l'histoire des espaces et je met le sujet résolu :)
              • Partager sur Facebook
              • Partager sur Twitter
                28 juin 2006 à 21:24:49

                Utilise fgets au lieu de scanf pour les chaines :) Utiliser comme ceci:
                fgets(char *chaine, int taille_maxi, stdin);
                stdin pour le flux d'entré :)

                Comme ça plus de problème d'espace :)
                • Partager sur Facebook
                • Partager sur Twitter
                  29 juin 2006 à 20:02:39

                  je comprend pas ce que sont les Flux , ici le flux d'entrée : qu'est-ce qu'on doit mettre à la place de stdin ?

                  Ou bien je laisse juste stdin, comme tu l'as marqué ?? :o

                  Sinon tu as toute ma gratitude :D:p:lol:
                  • Partager sur Facebook
                  • Partager sur Twitter
                    29 juin 2006 à 20:39:28

                    Un flux peut être un fichier, les flux d'entrée/sortie/erreur standard, des sockets, etc, depuis lesquels tu peux lire ou écrire (ou éventuellement les deux).

                    On les manipule avec fscanf(), fprintf(), fgetc(), fgets(), etc... (plutôt fread() et fwrite() pour les fichiers et recv() et send() pour les sockets).
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Probleme de mémoire avec le Mini-exo de "creer ses propres variables"

                    × 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