IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Crach lors de l'execution d'une boucle (a sa place)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut Crach lors de l'execution d'une boucle (a sa place)
    Bonjour à tous, je debute dans le C et jusqua present ma progression c'est passé sans trop de probleme mais là...je seche :s si vous pouviez m'aider

    Voici le code du main.c

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    #include <stdio.h>
    #include <stdlib.h>
    #include "main.h"
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "main.h"
     
     
     
    int main ()
    {
        int i = 0;
        int Maxi = 1;
     
        S_InfoJoueur Joueurs[i];
     
        for (i = 0 ;i <= Maxi;i++) {
     
            printf("Joueur %d", i+1);
     
            printf("\n\nEntrez votre pseudo : ");
            fgets(Joueurs[i].Pseudo, 100, stdin);
            *strchr(Joueurs[i].Pseudo, '\n') = '\0';
     
            printf("\nEntrez votre race : ");
            fgets(Joueurs[i].Race, 100, stdin);
            *strchr(Joueurs[i].Race, '\n') = '\0';
     
            printf("\nEntrez votre classe : ");
            fgets(Joueurs[i].Classe, 100, stdin);
            *strchr(Joueurs[i].Classe, '\n') = '\0';
        }
     
        for (i = 0 ;i <= Maxi;i++) {
        printf("\nInfo sur le joueur %d : %s %s %s", i, Joueurs[i].Pseudo, Joueurs[i].Race, Joueurs[i].Classe);
        }
     
        return 0;
    }
    et voici le code du main.h

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #ifndef MAIN
    #define MAIN
     
    #define TAILLE 100
     
    typedef struct StrInfoJoueur S_InfoJoueur;
    struct StrInfoJoueur
    {
        char Pseudo [TAILLE];
        char Race   [TAILLE];
        char Classe [TAILLE];
    };
     
    #endif
    voila le problème numéro 1 ^^ :

    Lorsque je fini de remplir les info du Joueurs[i] (ou i = 0 puisque premier passage de la boucle) et bien comme demander il me demande de rentré le pseudo du joueur 2 puis : "le programme a cessé de fonctionner" !!!

    Je pensé à un problème du genre "Joueurs[1].Pseudo" réécrit sur le "Joueurs[0].Pseudo" mais si tel est le cas je ne comprend pas pourquoi :s
    D'après vous c'est ça ou il y a une bourde ailleurs ? Et si c'est sa comment puis-je y remédier svp ?

    Ensuite le problème numéro 2 :

    Bas en fait y en aura pas, en cherchant le nom de la commande (typedef) je me suis rendu compte de l'oubli de cette saleter de ";" ...surement CodeBlocks qui veu me faire comprendre qu'il est bon de faire un pause mdr.

    Voila merci d'avance de votre aide

    Desoler du multipost :s mais je pense qu'il est mieu ici

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Bonjour,

    Citation Envoyé par NatanielKrios Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main ()
    {
        int i = 0;
        int Maxi = 1;
     
        S_InfoJoueur Joueurs[i];
     
        …
    Tu voulais sans doute écrire « S_InfoJoueur Joueurs[Maxi]; ».

    Bon courage.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    Alors tout d'abord merci ^^ effectivement il me suffisais d'ouvrir les yeux (même si là je peu plus vraiment ).

    Par contre maintenant le problème me viens de la deuxième boucle qui me fais bien 2 affichages mais ils sont identique (à savoir il m'affiche 2 foi les données du deuxième joueur). Y à t'il une valeur à réinitialiser ?

    Code corriger pour y voir plus clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "main.h"
     
     
     
    int main ()
    {
        int i = 0;
        int Maxi = 1;
     
        S_InfoJoueur Joueurs[Maxi];
     
        for (i = 0 ;i <= Maxi;i++) {
     
            printf("Joueur %d", i+1);
     
            printf("\n\nEntrez votre pseudo : ");
            fgets(Joueurs[Maxi].Pseudo, 100, stdin);
            *strchr(Joueurs[Maxi].Pseudo, '\n') = '\0';
     
            printf("\nEntrez votre race : ");
            fgets(Joueurs[Maxi].Race, 100, stdin);
            *strchr(Joueurs[Maxi].Race, '\n') = '\0';
     
            printf("\nEntrez votre classe : ");
            fgets(Joueurs[Maxi].Classe, 100, stdin);
            *strchr(Joueurs[Maxi].Classe, '\n') = '\0';
        }
     
        for (i = 0 ;i <= Maxi;i++) {
        printf("\nInfo sur le joueur %d : %s %s %s", i, Joueurs[Maxi].Pseudo, Joueurs[Maxi].Race, Joueurs[Maxi].Classe);
        }
     
        return 0;
    }

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par NatanielKrios Voir le message
    Par contre maintenant le problème me viens de la deuxième boucle qui me fais bien 2 affichages mais ils sont identique (à savoir il m'affiche 2 foi les données du deuxième joueur).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        for (i = 0 ;i <= Maxi;i++) {
        printf("\nInfo sur le joueur %d : %s %s %s", i, Joueurs[Maxi].Pseudo, Joueurs[Maxi].Race, Joueurs[Maxi].Classe);
        }
    Tu voulais sans doute écrire « printf("\nInfo sur le joueur %d : %s %s %s", i, Joueurs[i].Pseudo, Joueurs[i].Race, Joueurs[i].Classe); ».

  5. #5
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Tu voulais sans doute écrire « printf("\nInfo sur le joueur %d : %s %s %s", i, Joueurs[i].Pseudo, Joueurs[i].Race, Joueurs[i].Classe); ».
    Ba en fait j'ai essayer mais alors la la première ligne m'affiche des truc sans queue ni tète (en tout cas rien de ce que j'ai entrer) et la deuxième quand a elle me renvoi bien les données du joueur 2 :s c'est pour sa je comprend rien là^^
    (v faire un sceen sa sera plus simple c'est asse ...déroutent)



    Uploaded with ImageShack.us

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Chercheur d'emploi
    Inscrit en
    Septembre 2007
    Messages
    7 485
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Chercheur d'emploi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 485
    Par défaut
    Citation Envoyé par NatanielKrios Voir le message
    Ba en fait j'ai essayer mais alors la la première ligne m'affiche des truc sans queue ni tète (en tout cas rien de ce que j'ai entrer) et la deuxième quand a elle me renvoi bien les données du joueur 2 :s c'est pour sa je comprend rien là^^
    (v faire un sceen sa sera plus simple c'est asse ...déroutent)
    C'est parce qu'en fait, il faut faire la même chose dans ta première boucle aussi :

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
        for (i = 0 ;i <= Maxi;i++) {
     
            printf("Joueur %d", i+1);
     
            printf("\n\nEntrez votre pseudo : ");
            fgets(Joueurs[i].Pseudo, 100, stdin);
            *strchr(Joueurs[i].Pseudo, '\n') = '\0';
     
            printf("\nEntrez votre race : ");
            fgets(Joueurs[i].Race, 100, stdin);
            *strchr(Joueurs[i].Race, '\n') = '\0';
     
            printf("\nEntrez votre classe : ");
            fgets(Joueurs[i].Classe, 100, stdin);
            *strchr(Joueurs[i].Classe, '\n') = '\0';
        }

  7. #7
    Invité
    Invité(e)
    Par défaut
    Dans ces cas là, je crois que la bonne solution est d'éteindre la machine, prendre une feuille de papier et écrire :
    On va créer la liste des joueurs.
    Je prévois un nombre maxi de 5 joueurs.
    Pour chaque joueur, je demande
    - le nom
    - le prénom
    - l'année de naissance
    puis je stocke dans un tableau ces imformations
    Fin des insctiptions
    Je veux vérifier les renseignements.
    Pour chaque ligne du tableau
    J'imprime 1- son prénom 2- son nom 3 sa date de naissance

    Etc. Etc
    Vous verrez, ça marchera du premier coup.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation:
    Envoyé par NatanielKrios Voir le message
    Code :

    int main ()
    {
    int i = 0;
    int Maxi = 1;

    S_InfoJoueur Joueurs[i];




    Tu voulais sans doute écrire « S_InfoJoueur Joueurs[Maxi]; ».
    ou plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    S_InfoJoueur Joueurs[Maxi+1];

  9. #9
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    Question bête mais pourquoi préférer Joueurs[Maxi+1] à Joueurs[Maxi] ?
    En tout cas le résultat est le même pour la seconde boucle : Il me renvoi bien 2 affichage mais 2 foi les info du joueur 2 :s Les données sont elles écrasées ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Quand vous dimensionnez un tableau à N vous réservez 10 positions qui seront numérotées de 0 à 9;
    Dans votre boucle, vous mettez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for (int i=0; i<=Maxi; i++)
    Or Maxi=1, donc i va prendre les valeurs 0 et 1, il faut donc 2 entrées au tableau.
    Ce n'est pas une préférence c'est obligatoire.
    Je n'ai pas regardé le reste.

  11. #11
    Membre averti
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    Oki merci des précision. Par contre cela s'applique t'il à toute les boucles faisant référence à un tableau ?

    Pour le reste (le problème lors de la restitution des données), depuis tout à l'heure je me torture les méninge (ou ce qu'il en reste^^) sans trouver de solution. Je vais essayer sans boucle au moin je serai fixé

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Délai expiré lors de l'execution d'une requete sqlserver
    Par lc.soft dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/09/2015, 11h41
  2. Erreur lors de l'execution d'une boucle
    Par lily59 dans le forum Langage
    Réponses: 4
    Dernier message: 18/11/2011, 18h19
  3. Réponses: 3
    Dernier message: 09/04/2006, 13h04
  4. Erreur PLSQL lors de l'execution d'une fonction
    Par chicken92000 dans le forum PL/SQL
    Réponses: 3
    Dernier message: 17/03/2006, 17h12
  5. [ADO] Probleme lors de l'execution d'une requete...
    Par NoisetteProd dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/06/2004, 12h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo