Afficher mon tableau

Résolu/Fermé
Kakashi-au-Susanoo - 6 août 2014 à 16:45
 Kakashi-au-Susanoo - 14 août 2014 à 12:44
Bonjour j'ai créer dans mon programme une boucle qui permet de demander les infos de 2 joueurs qui sont directement stockés dans un tableau. Jusqu'ici aucun problème mais après je sais pas comment afficher les infos récoltés (il faut afficher le tableau mais je n'y arrive pas). Voila mon code :

*main.h :
typedef struct Coordonnees Coordonnees;
typedef struct Personne Personne;

struct Coordonnees
{
int x;
int y;
};

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

*main.c :
#include <stdio.h>
#include <stdlib.h>
#include "main.h"

int main()
{
Coordonnees point;
point.x = 10;
point.y = 20;

Personne Utilisateur;
printf("Quel est votre nom ? ");
scanf("%s", Utilisateur.nom);
printf("Et votre prenom ? ");
scanf("%s", Utilisateur.prenom);
printf("Donc vous vous appelez %s %s. \n\n", Utilisateur.prenom, Utilisateur.nom);

Personne Joueurs[2];
int numeroJoueur;
int nombreJoueur = 2;
printf("Vous etes en mode 2 joueurs. Vous allez entrez vos infos joueur\n");
printf("Quel est votre numero de joueur ? ");
scanf("%d", &numeroJoueur);
do
{
printf("Quel est votre numero de joueur ? ");
scanf("%d", &numeroJoueur);
printf("Quel est votre nom ? ");
scanf("%s", &Joueurs[numeroJoueur].nom);
printf("Et votre prenom ? ");
scanf("%s", &Joueurs[numeroJoueur].prenom);
printf("Quel age avez-vous ? ");
scanf("%d", &Joueurs[numeroJoueur].age);
nombreJoueur--;
}
while(nombreJoueur != 0);

int i;
for(i = 0; i < ; i++)
{
printf("% \n\n", Joueurs[i]);
}

Comme vous pouvez le voir j'ai appris comment afficher un tableau mais jusqu'ici je n'affichait que des tableaux contenant des nombres la je c pas quel valeur je dois mettre après le < dans les paramètres de la boucle for (j'ai essayé 2 qui est la taille du tableau) et quel lettre mettre après le % à l'intérieur de ma boucle for (j'ai essayé s).

ps: mon programme marche parfaitement jusqu'au moment d'afficher le tableau. A ce moment-là il plante...

Merci d'avance pour votre aide.

1 réponse

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
6 août 2014 à 21:09
Bonjour,

printf("Quel est votre numero de joueur ? ");
scanf("%d", &numeroJoueur);
do
{
printf("Quel est votre numero de joueur ? ");
scanf("%d", &numeroJoueur);

Lors de la 1ère fois, tu vas afficher 2 fois, "Quel est votre numero,..." et tu vas demander 2 fois la saisie de numeroJoueur. Ca serait mieux d'enlever le 1er printf() ainsi que le 1er scanf().

Ensuite, la condition du while() ne me parait pas judicieuse. Si l'utilisateur saisit qu'il est le joueur 1, le programme ne demandera qu'une fois la saisie. S'il tape 0, boucle infinie. Et s'il tape 2, tu écris en dehors du tableau. Il faut donc revoir cette partie.

for(i = 0; i < ; i++)
Il faut mettre la taille du tableau : 2. Si tu veux automatiser le calcul : sizeof(Joueurs) / sizeof(*Joueurs)

scanf("%s", &Joueurs[numeroJoueur].nom);
On ne met pas de & devant puisqu'il s'agit d'un pointeur.
De même pour le prénom.

printf("% \n\n", Joueurs[i]);
Ce n'est pas possible en C. Il faut afficher champ par champ.
Par exemple :
printf("%s\n\n, Joueurs[i].nom);

Etc. pour chacun des champs. Typiquement, on fait une fonction. Ainsi tu pourras faire :
afficher(Joueurs[i]);


Sinon, ça fait bizarre de demander le nom en mode 1 joueur, puis demander les deux en mode 2 joueurs. Il faudrait plutôt faire un menu et demander à l'utilisateur s'il souhaite être en mode 1 ou 2 joueurs. Puis ensuite, appeler le bon mode.

Et enfin, n'oublie pas de mettre :
return 0;
en fin de main() pour dire que tout s'est bien déroulé.

Note : N'oublie pas de poster ton code entre 2 balises "code c" la prochaine fois pour rendre ton code plus joli sur CCM. Exemple :
<"code c">/*ici tu mets ton code*/<"/code"> (sans les guillemets).

Cdlt,
0
Kakashi-au-Susanoo
6 août 2014 à 21:46
Merci pour les conseils. Je vais revoir cela demain car là je suis occupé je te remontrerai mon code je sais pas pourquoi j'ai 2 fois printf("Quel est votre numero de joueur ? ");
scanf("%d", &numeroJoueur);
mais ce n'est pas le cas dans mon code.
0
Kakashi-au-Susanoo
7 août 2014 à 15:52
la fonction afficher n'existe pas et si je dois la créer c'est justement ce que je demande parce que je n'arrive pas à afficher un tableau où sont stockés des chaînes de caractères
0
Kakashi-au-Susanoo
7 août 2014 à 15:57
Si l'utilisateur saisit qu'il est le joueur 1, le programme ne demandera qu'une fois la saisie.

Je ne croit pas car la boucle se termine seulement lorsque nombreJoueur = 0. Or cette variable ne dépend pas de l'utilisateur mais c'est vrai que le programme plante si l'utilisateur ne tappe pas 1 ou 2 quesque tu me proposes pour y remédier ?
0
Kakashi-au-Susanoo
7 août 2014 à 16:05
Sinon, ça fait bizarre de demander le nom en mode 1 joueur, puis demander les deux en mode 2 joueurs. Il faudrait plutôt faire un menu et demander à l'utilisateur s'il souhaite être en mode 1 ou 2 joueurs. Puis ensuite, appeler le bon mode.
Désolé mais tout ce qu'il y a avant cette ligne :
Personne Joueurs[2]
n'y faîtes pas attention c'était un autre exercice que je réalisais
0
Kakashi-au-Susanoo
7 août 2014 à 16:09
Merci pour vos conseils pour améliorer mon programme mais mon problème se situe réellement dans l'affichage de mon tableau parce que mon programme marche comme il faut jusqu'à qu'il doit afficher les infos des joueurs là il plante
0