Problème débutant

Bonjour, j'ai commencé à apprendre le C depuis 3 jours, et j'ai un petit problème sur un code qui normalement doit relever des informations sur plusieurs personnes puis de les afficher :
main.c

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

int main(int argc, char *argv[])
{
    Personne joueur[5]; // On appelle la structure Personne
    long nbJoueur = 5, s = 0; // On définit les variables
    for(s = 0; s < nbJoueur; s++) // On lance la première boucle pour récolter des infos sur les joueurs
    {
        printf("\n\n***Joueur %ld***\n\n\n", s);
        printf("Quel est votre nom ? ");
        scanf("%s", joueur[s].nom);
        printf("Quel est votre prenom ? ");
        scanf("%s", joueur[s].prenom);
        printf("Quel est votre age ? ");
        scanf("%ld", joueur[s].age);
        printf("Sexe : \n\n1. Masculin\n2. Feminin\n\n");
        scanf("%ld", joueur[s].sexe);
    }

    for(s = 0; s < nbJoueur; s++) // On lance la deuxième boucle pour afficher les informations récoltées
    {
        printf("***Infos joueur n°%ld", s);
        printf("Nom : %s", joueur[s].nom);
        printf("Prenom : %s", joueur[s].prenom);
        printf("Age : %ld", joueur[s].age);
        printf("Sexe : %s", choixSexe(joueur[s].sexe));
    }
    system("PAUSE");
    return 0; // On arrête proprement
}

char choixSexe(int sexe) // Fonction pour transformer le dernier scanf de la première boucle
{
    if(sexe = 1)
    {
        return "homme";
    }
    else
    {
        return "femme";
    }
}



main.h

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

typedef struct Personne Personne;
struct Personne
{
    char nom[100];
    char prenom[100];
    long age;
    int sexe;
};

char choixSexe(int sexe);



Et ça bug quand on demande l'âge à la première boucle (parfois ça plantait au deuxième passage de la première boucle).

Merci d'avance pour votre aide!
Configuration: Windows XP
Firefox 3.0.3
Code::Blocks 8.0

10 réponses

  • Votes
  • Date
  • Date décroissante
  1. Ca compile et lance la console normalement, puis ça crash d'un coup (avec "console.exe a rencontré un problème et doit fermer etc.).
    Le debugger m'affiche ça quand je le lance :
    #0 77C14995	wscanf() (C:\WINDOWS\system32\msvcrt.dll:??)
    #1 00000000	??() (??:??)
    
    1. Il te manque surement cette DLL !
      Télécharge la et place la dans System32
      1. Malheuresement non... J'ai déjà cette DLL et même en la re-téléchargeant ça ne change rien...
        1. bonjour,
          je pense que
          "include "main.h"
          est auxiliaire vous devez le supprimer
          1. Je sais que je suis sous Linux mais bon du c, c'est du c ...

            1)lors de la compilation :
            main.c: In function 'main':
            main.c:17: warning: format '%ld' expects type 'long int *', but argument 2 has type 'long int'
            main.c:19: warning: format '%ld' expects type 'long int *', but argument 2 has type 'int'
            main.c:28: warning: format '%s' expects type 'char *', but argument 2 has type 'int'
            main.c: In function 'choixSexe':
            main.c:38: warning: return makes integer from pointer without a cast
            main.c:42: warning: return makes integer from pointer without a cast

            2)comparaison en C : ==
            = : assignement
            1. @marwenha : même en incluant le contenu de main.h dans main.c, j'obtiens le même crash.
              @Nobody : j'ai pas tout compris là... Le 1) c'est les erreurs trouvées durant la compile et le 2) c'est ce qu'il faut changer dans le code??

              Sinon, merci à vous deux de m'aider ;)
              1. main.c :

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

                int main(int argc, char *argv[])
                {
                Personne joueur[5]; // On appelle la structure Personne
                long nbJoueur = 5, s = 0; // On définit les variables
                for(s = 0; s < nbJoueur; s++) // On lance la première boucle pour récolter des infos sur les joueurs
                {
                printf("\n\n***Joueur %ld***\n\n\n", s);
                printf("Quel est votre nom ? ");
                scanf("%s", joueur[s].nom);
                printf("Quel est votre prenom ? ");
                scanf("%s", joueur[s].prenom);
                printf("Quel est votre age ? ");
                scanf("%ld", &(joueur[s].age));
                printf("Sexe : \n\n1. Masculin\n2. Feminin\n\n");
                scanf("%i", &(joueur[s].sexe));
                }

                for(s = 0; s < nbJoueur; s++) // On lance la deuxième boucle pour afficher les informations récoltées
                {
                printf("***Infos joueur n°%ld\n", s);
                printf("Nom : %s\n", joueur[s].nom);
                printf("Prenom : %s\n", joueur[s].prenom);
                printf("Age : %ld\n", joueur[s].age);
                printf("Sexe : %s\n", choixSexe(joueur[s].sexe));
                }
                system("PAUSE");
                return 0; // On arrête proprement
                }

                char* choixSexe(int sexe) // Fonction pour transformer le dernier scanf de la première boucle
                {
                if(sexe == 1)
                {
                return "homme";
                }
                else
                {
                return "femme";
                }
                }

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

                typedef struct Personne Personne;
                struct Personne
                {
                char nom[100];
                char prenom[100];
                long age;
                int sexe;
                };

                char *choixSexe(int sexe);
                1. Merci beaucoup, apparement ça buggait au niveau des scanf pour l'age et le sexe!
                  Merci et @+