Partage
  • Partager sur Facebook
  • Partager sur Twitter

Boucle for renvoie de tableau[i].

problème qui persiste

    19 novembre 2007 à 20:24:05

    Bonsoir! :)
    J'ai un problème que je n'arrive pas a comprendre, donc que je n'arrive pas a résoudre, bref, il persiste !

    1)
    Voilà, j'ai mis une boucle for, pour que autant de joueurs souhaité ( 4 maximum ici) puissent taper leurs coordonnées.
    Or a chaque fois que la boucle se finit je perds la valeur du joueur[0] puis du joueur[1], etc...
    Le problème c'est que si par la suite je voulais continuer mon programme comment ferais-je pour garder les coordonnées fournient par les utilisateurs ?

    2 autres petits problèmes: :-°

    2)
    Est-il normal que lorsque je tape une chaîne, par exemple celle de l'adresse, le programme ne reconnaissent pas les espaces ?
    Par exemple : 33 rue Lafayette
    Cela fera planter mon programme et n'affichera que le "33".

    3)
    Lorsque vient le tour d'énoncer son age, une fois l'age tapé par l'utilisateur, le programme plante.
    Cela ne plantais pas quand je n'utilisais pas le tableau.
    Pourriez-vous m'expliquer pourquoi ,s'il vous plait ? :o

    Voici le code source ce que j'ai fait:

    Dans main.h:

    1. typedef struct TaVie TaVie; /*signifie , "struct TaVie" est équivalent a écrire
    2. "Tavie" dans le fichier ".c "par exemple. */
    3. struct TaVie
    4. {
    5.     char nom[30];
    6.     char prenom[30];
    7.     char adresse[1000];
    8.     long age;
    9.     int garcon;
    10. };



    Dans main.c:

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include "main.h"
    4. int main()
    5. {
    6.     long nombreDeJoueurs = 0;
    7.     long i;
    8.     printf("combien de joueurs participent (4 au maximum): ");
    9.     do
    10.     scanf("%ld", &nombreDeJoueurs);
    11.     while(nombreDeJoueurs < 0 || nombreDeJoueurs > 4);
    12.     printf("\n");
    13.     for(i=0; i<nombreDeJoueurs; i++)
    14.     {
    15.             TaVie joueur[i];
    16.             printf("Joueur 1 \n\n");
    17.             printf("Quel est ton nom?\n nom: ");
    18.             scanf("%s", joueur[i].nom);
    19.             printf("\n prenom: ");
    20.             scanf("%s", joueur[i].prenom);
    21.             printf("\n\n quel age as-tu? : ");
    22.             scanf("%ld", &joueur[i].age);
    23.             printf("\n\n Quelle est ton adresse?\n");
    24.             scanf("%s", joueur[i].adresse);
    25.             printf("\nVoici vos coordonnees : %s  %s \n\n", joueur[i].nom, joueur[i].prenom);
    26.             printf("Age: %ld ans \n\n Adresse: %s", joueur[i].age, joueur[i].adresse);
    27.       }
    28.    system("\nPAUSE");
    29.         return 0;
    30. }



    Voilà , tout plein de petites questions de débutant, mais si je ne les poses pas je n'évoluerai jamais. ^^
    • Partager sur Facebook
    • Partager sur Twitter
      19 novembre 2007 à 20:32:02

      1) Je vois : joueur[i].nom Où est-ce que tu déclares ton tableau de joueurs?

      2) Ton problème vient de l'utilisation de scanf qui est mauvaise, préfère fgets (détaillé sur un tuto du SDZ).

      3) Idem
      • Partager sur Facebook
      • Partager sur Twitter
        19 novembre 2007 à 20:44:18

        bonsoir Bladelight? voila nepser m'a devancer pour les question 2 et3 va lire ca. Utiliser les bonnes fonction d'entree.

        Pour la première question ben je suis pas trop sûr :euh: mais il me semble que tu ne déclares pas ton tableau de structure.

        1. TaVie joueur[3] // 4 joueur au maximun joueur 0,1,2 et 3


        :magicien:
        • Partager sur Facebook
        • Partager sur Twitter
          19 novembre 2007 à 20:51:49

          Oui merci ! c'est vrai, j'ai oublié de déclarer la tableau, pas bète lol , comme le compilateur ne me l'a pas signalé , je n'y ai pas pensé, cependant c'est pas cela qui fait que je vais récupérer les valeurr mon tableau après la boucle.
          Car quand vient le tour de joueur[1] , les coordonnées de joueur[0] sont supprimés. :s

          En tout cas meri de votre aide :)
          • Partager sur Facebook
          • Partager sur Twitter
            19 novembre 2007 à 23:09:59

            réponse rapide :

            - Il manque les accolades pour la boucle do while
            - De plus il me semble que la condition serait plus logique si tu mettais ( NombresDeJoueurs < 1 ..... ) et non < 0
            - Ensuite au dessus de ta boucle, une allocation dynamique serait plus "propre" pour déclarer ton tableau de type TaVie
            - Surtout enlève le : TaVie joueur[i]; !!! et qui plus est dans la boucle for !!!
            • Partager sur Facebook
            • Partager sur Twitter
              20 novembre 2007 à 17:25:06

              1) Exercice : créez ce tableau de type Personne et demandez les infos de chacun grâce à une boucle (qui se répète tant qu'il y a des joueurs). Faites un petit tableau de 2 joueurs pour commencer, mais si ça vous amuse vous pourrez agrandir la taille du tableau plus tard.
              Affichez à la fin du programme les infos que vous avez recueillies sur chacun des joueurs ;)

              Voilà l'exercice sachant que l'allocation dynamique n'est pas encore vue.
              Comment afficher chacunes des infos qui sortent d'une boucle?

              Si j'ai le "TaVie joueur[i]" dans la boucle for , c'est bien pour éviter d'écrire 36fois l'opération. Mais du coup comment je pourais renvoyer les valeurs ?
              Enfin peut-être que le mieux serait d'en faire une fonction apars , non ? Mais même si ça prendrais un nombre de lignes plus léger que d'écrire le code plein plein de fois, je serais obligé de réécrire la fonction autant de fois qu'il y aurait de joueurs.
              Bon il est vrai qu'il n'y a pas 36joueurs en général, mais malgré tout j'aimerai savoir faire cela pour d'autres criconstances.
              Voilà, jsais pas si vous avez compris où je veux en venir ^^.
              • Partager sur Facebook
              • Partager sur Twitter
                20 novembre 2007 à 19:34:07

                Ne confond pas boucle et fonctions !!!

                Ce qu'il faut c'est que tu déclares ton tableau au début du main comme cela :
                TaVie joueur[4];

                Puis dans ta boucle for tu remplis les cases du tableau comme cela:

                for ( i = 0 ; i < nbJoueurs ; i++ )
                {
                printf("Joueur n° %i\n", i);
                printf("Nom = ");
                scanf("%s", joueur[i].nom);
                printf("Age = ");
                scanf("%ld", &joueur[i].age);
                }

                // Ici j'ai employé un scanf pour les chaines de caractères. Chose que je te déconseillerais de faire à l'avenir. Tu comprendra bien vite pourquoi :)
                • Partager sur Facebook
                • Partager sur Twitter
                  20 novembre 2007 à 21:57:22

                  Merci beaucoup ! :D

                  Cependant si par la suite je veux récupérer chaques informations des joueur[i] , comment faire ? Car après la boucle je n'aurais que les infos du dernier joueur.
                  _Donc comment afficher les infos de tous les joueurs par la suite ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    21 novembre 2007 à 2:29:39

                    Et bien tu refais la même boucle pour parcourir à nouveau le tableau en affichant les résultats.. non ? qu'est-ce qui t'échappes ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      21 novembre 2007 à 10:21:53

                      Citation : Bladelight

                      Merci beaucoup ! :D

                      Cependant si par la suite je veux récupérer chaques informations des joueur[i] , comment faire ? Car après la boucle je n'aurais que les infos du dernier joueur.
                      _Donc comment afficher les infos de tous les joueurs par la suite ?




                      1. for ( i = 0 ; i < nbJoueurs ; i++ )
                      2. {
                      3. printf("Joueur n° %i\n", i);
                      4. printf("Nom = ");
                      5. scanf("%s", joueur[i].nom);
                      6. printf("Age = ");
                      7. scanf("%ld", &joueur[i].age);
                      8. }


                      dans ce code là tu va trouver les informations de tous les joueurs " de 0 à n-1 " donc ca signefie n joueurs que ta déja entré.

                      pour l'affichage tu peux faire :
                      1. printf("Joueur n° %i\n", i+1);

                      au lieu de :
                      1. printf("Joueur n° %i\n", i);

                      car dans ce cas il vas débuter du joueur numero 0, mais le nombre des joueurs ne changeront pas en tout les cas.
                      où est t-il ton probelme ?
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Boucle for renvoie de tableau[i].

                      × 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