Probleme de declaration d'une chaine dynamique
wisley80
Messages postés
12
Date d'inscription
Statut
Membre
Dernière intervention
-
zedzet Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
zedzet Messages postés 18 Date d'inscription Statut Membre Dernière intervention -
Bonjours les CCM :)
je suis entrain de faire un Projet de jeu à plusieurs joueur en C et pour enregistrer leur info; j'ai crée une liste chainé contenant le nom et le score de chaque joueur ; que je vais ensuit enregistrer dans un fichier binaire .dat ou .bin pour conserver le meilleur score :
Mon problème c que je ne connais pas la taille du nom du joueur :( sa c que j'ai essaye de faire mais apparemment sa ne marche pas.
le printf me donne exactement la chaine comme je l'écris dans le scanf mais après sa plainte!!!! :'(
la fonction qui ajoute le nouveau joueur dans la liste :

pouvez vous m'aider???? merci d'avance :D
je suis entrain de faire un Projet de jeu à plusieurs joueur en C et pour enregistrer leur info; j'ai crée une liste chainé contenant le nom et le score de chaque joueur ; que je vais ensuit enregistrer dans un fichier binaire .dat ou .bin pour conserver le meilleur score :
typedef struct Joueur Joueur; struct Joueur { char *nom; int *score; Joueur *suiv; };
Mon problème c que je ne connais pas la taille du nom du joueur :( sa c que j'ai essaye de faire mais apparemment sa ne marche pas.
char *nom= (char*)malloc(sizeof(char)); Joueur *ListJoueur=malloc(sizeof(Joueur)); printf("**********Jouer************\n\n"); do{ printf("Donner le nombre de joueur:"); scanf("%d",&nbrj); }while (i<1); for (i=1;i<=nbrj;i++) { printf("donner le nom du joueurn°%d:",i); scanf("%s",nom); printf("%s",nom); Ajouterjoueur(ListJoueur,nom); };
le printf me donne exactement la chaine comme je l'écris dans le scanf mais après sa plainte!!!! :'(
la fonction qui ajoute le nouveau joueur dans la liste :
void Ajouterjoueur (Joueur *j, char *nom){ Joueur *cour=j; Joueur *tmp=malloc(sizeof(Joueur)); while (cour->suiv!=NULL){ cour=cour->suiv; } tmp->nom=nom; cour->suiv=tmp; tmp->suiv=NULL; }

pouvez vous m'aider???? merci d'avance :D
A voir également:
- Probleme de declaration d'une chaine dynamique
- Déclaration - Guide
- En plus des revenus, il ne faut surtout pas oublier de faire cette déclaration en ligne aux impôts - Guide
- Tableau croisé dynamique - Guide
- Chaine tnt gratuite sur mobile - Guide
- Plus de chaine tv - Guide
1 réponse
Bonjour,
je viens d'analyser votre code et j'ai découvert cette ligne dans votre typedef :
or à chaque itération vous avez mis
ce qui veut dire que vous luis affecter la même adresse de variable (qui contient la dernière valeur lue).
et il ya aussi dans la fonction Ajouterjoueur :
il faut mettre :
voici une petite rectification de vos petites erreurs , j'ai ajouter deux lignes pour afficher les 2 premier nom de joueur (pour vérifier):

je viens d'analyser votre code et j'ai découvert cette ligne dans votre typedef :
char *nom;
or à chaque itération vous avez mis
tmp->nom=nom;
ce qui veut dire que vous luis affecter la même adresse de variable (qui contient la dernière valeur lue).
et il ya aussi dans la fonction Ajouterjoueur :
il faut mettre :
cour->nom=nom; cour->suiv=tmp; tmp->suiv=NULL;
voici une petite rectification de vos petites erreurs , j'ai ajouter deux lignes pour afficher les 2 premier nom de joueur (pour vérifier):
#include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Joueur Joueur; struct Joueur { char *nom; int *score; Joueur *suiv; }; Joueur* Ajouterjoueur (Joueur *j, char *nom) { int k,L ; char *nom_joueur = NULL; Joueur *cour=j; Joueur *tmp=malloc(sizeof(Joueur)); /// copier le nom dans nom_joueur : L = strlen(nom); nom_joueur = (char*)malloc((L+1)*sizeof(char)); strcpy(nom_joueur,nom); while (cour->suiv!=NULL) { cour=cour->suiv; } cour->nom = nom_joueur; cour->suiv = tmp; tmp->suiv = NULL; return(cour); } int main() { int i,nbrj=0; char *nom = NULL; Joueur *ListJoueur = NULL; Joueur *Tete_ListJoueur = NULL; nom = (char*)malloc(sizeof(char)); ListJoueur=malloc(sizeof(Joueur)); /// sauvgarder l'adresse de la tete de liste : Tete_ListJoueur = ListJoueur; printf("**********Jouer************\n\n"); do { printf("Donner le nombre de joueur : "); scanf("%d",&nbrj); }while (nbrj<1); for (i=1;i<=nbrj;i++) { printf("donner le nom du joueur N°%d :",i); scanf("%s",nom); printf("%s\n",nom); ListJoueur = Ajouterjoueur(ListJoueur,nom); }; /// afficher les deux premier nom de joueur : printf("\n\n\n"); printf("affichage du contenu : \n"); printf("%s\n",Tete_ListJoueur->nom); printf("%s\n",Tete_ListJoueur->suiv->nom); //printf("%s\n",Tete_ListJoueur->suiv->suiv->nom); }

mais à l'exécution d'un copier coller de votre code sa ne marche pas le programme s'arrête de fonctionner juste après que je tape le nom du 1 joueur "AAA" et qu'il l'affiche "AAA"
avec l'erreur ""Process terminated with status 255 (9 minute(s), 40 second(s))""
est-ce que sa peut etre a cause de mon PC ???? :/
sinon pourquoi sa marche pour vous et moi non???
allez dans
setting-> envirenement
(vous etes alors sur general setting)
modifier alors le champs tout en bas :
terminal to lunch console programs
choisissez n'importe quoi (enfin modifier et re-compiller)
j'espère que cela vous aidera sinon copier-coller le message d'erreur et lancer un recherche google vous tomberai probablement sur des millier de cas similaire :p
bonne chance.