Partage
  • Partager sur Facebook
  • Partager sur Twitter

Crash de l'application au second pas de ma boucle

Sujet résolu
    22 mars 2018 à 18:21:00

    Bonjour,

    Je ne sais pas si mon titre est des plus explicite mais je tâche de faire au mieux :D

    Je suis débutant en C en j'en suis actuellement à ce chapitre (les types de variables) :

    https://openclassrooms.com/courses/apprenez-a-programmer-en-c/creez-vos-propres-types-de-variables

    Je m'attaque donc à l'exercice (avec une touche plus personnelle mais dans le contexte demandé). La compilation va jusqu'au bout mais contient ces warnings :

    ||=== Build: Debug in structure_exo_1 (compiler: GNU GCC Compiler) ===|
    E:\Projets_C\structure_exo_1\main.c||In function 'main':|
    E:\Projets_C\structure_exo_1\main.c|16|warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]|
    E:\Projets_C\structure_exo_1\main.c|18|warning: format '%d' expects argument of type 'int *', but argument 2 has type 'int' [-Wformat=]|
    ||=== Build finished: 0 error(s), 2 warning(s) (0 minute(s), 0 second(s)) ===|
    ||=== Run: Debug in structure_exo_1 (compiler: GNU GCC Compiler) ===|
    

    Mon projet tourne sous deux fichiers que voici :

    main.c :

    #include <stdio.h>
    #include <stdlib.h>
    #include "main.h"
    
    int main()
    {
        Joueurs utilisateurs[4];
        int arraySize = 4;
        int i;
    
        for(i = 0; i < arraySize; i++)
        {
            printf("Veuillez indiquer le pseudo que vous souhaitez utiliser : ");
            scanf("%s", utilisateurs[i].pseudo);
            printf("A present, veuillez indiquer votre age : ");
            scanf("%d", utilisateurs[i].age);
            printf("Pour terminer, etes vous un garcon (0) ou une fille (1) ? (tapez 0 ou 1) : ");
            scanf("%d", utilisateurs[i].sexe);
        }
    
        i = 0;
    
        for (i = 0; i < arraySize; i++)
        {
            printf("Pseudo du joueur %d : %s\n", i, utilisateurs[i].pseudo);
            printf("Age du joueur %d : %d\n", i, utilisateurs[i].age);
            printf("Sexe du joueur %d : ", i);
            if(utilisateurs[i].sexe == 0)
            {
                printf("Garcon\n\n");
            }
            else if(utilisateurs[i].sexe == 1)
            {
                printf("Fille\n\n");
            }
            else
            {
                printf("Asexue");
            }
        }
    
        return 0;
    }
    



    main.h :

    #ifndef MAIN_H_INCLUDED
    #define MAIN_H_INCLUDED
    
    typedef struct Joueurs Joueurs;
    struct Joueurs
    {
        char pseudo[100];
    
        int age;
        int sexe; // 0 = Garçon, 1 = Fille
    };
    
    #endif // MAIN_H_INCLUDED
    


    J'ai un doute dans mes scanf ligne 16 et 18 de mon main.c, je pense que ma façon de stocker la valeur est mauvaise. Avant de m'emporter, je sollicite vos conseils (pas de réponses toutes faites svp, j'aime bien réfléchir et comprendre ce qu'il se passe^^).

    EDIT : j'ai inséré un printf à la fin de ma première boucle (quand j'ai le crash), comme ceci :

        for(i = 0; i < arraySize; i++)
        {
            printf("Veuillez indiquer le pseudo que vous souhaitez utiliser : ");
            scanf("%s", utilisateurs[i].pseudo);
            printf("A present, veuillez indiquer votre age : ");
            scanf("%d", utilisateurs[i].age);
            printf("Pour terminer, etes vous un garcon (0) ou une fille (1) ? (tapez 0 ou 1) : ");
            scanf("%d", utilisateurs[i].sexe);
            printf("test");
        }

    Et l'application crash avant de l'afficher, donc la première boucle ne se termine même pas. Si cela peut vous aider^^

    Merci de prendre pitié du débutant que je suis :ange:

    Cordialement,

    Benjamin

    -
    Edité par Protogun 22 mars 2018 à 18:27:03

    • Partager sur Facebook
    • Partager sur Twitter
      22 mars 2018 à 18:26:57

      Hello,

      Lignes 16 et 18: &utitlisateur[i].age (et .sexe, bien sur). scanf() attend une zone mémoire où il pourra stocker la donnée entrée par l'utilisateur, mais ton programme lui donne une valeur, pas une adresse...

      -
      Edité par edgarjacobs 22 mars 2018 à 18:29:25

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        22 mars 2018 à 18:42:46

        Cela fonctionne ! Merci beaucoup^^

        Effectivement, j'ai mal interprété la demande de la commande, je me suis un peu embrouillé dans ce nouveau format.

        • Partager sur Facebook
        • Partager sur Twitter

        Crash de l'application au second pas de ma boucle

        × 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