Tableau de chaînes de caractères

Tableau de chaînes de caractères - C - Programmation

Marsh Posté le 23-11-2007 à 11:44:22    

Bonjour,
 
Je suis en train de coder un petit jeu, et je voudrais stocker les noms des joueurs dans un tableau global. Basiquement, mes déclarations sont les suivantes :
 

Code :
  1. char noms[200][20];
  2. char nom[20];


 
J'ai le nom d'un joueur donné dans la variable 'nom', et je voudrais le stocker dans une des cases du tableau 'noms'. Seulement, si je fais :
 

Code :
  1. noms[1] = nom;


 
Je récupère une erreur à la compilation comme quoi les types sont incompatibles, et si je fais :
 

Code :
  1. strcpy(noms[1],nom);


 
Alors là ça compile, mais à l'exécution, si je demande :
 

Code :
  1. printf("noms[1] vaut : %s",noms[1]);


 
Ca m'affiche "noms[1] vaut : "...
 
Bref, puisque comme ça, ça ne marche pas, il faut faire comment ? :o
 
Merci :jap:

Message cité 2 fois
Message édité par double clic le 23-11-2007 à 11:45:29

---------------
Tell me why all the clowns have gone.
Reply

Marsh Posté le 23-11-2007 à 11:44:22   

Reply

Marsh Posté le 23-11-2007 à 11:53:36    

double clic a écrit :

Je suis en train de coder un petit jeu, et je voudrais stocker les noms des joueurs dans un tableau global.


 
C'est mal. [:dawao]
Les globales ne doivent servir que dans certains cas particulier, en général des constantes qui ne peuvent être initialisées au moment de la compilation.
 

double clic a écrit :

J'ai le nom d'un joueur donné dans la variable 'nom', et je voudrais le stocker dans une des cases du tableau 'noms'. Seulement, si je fais :
 

Code :
  1. noms[1] = nom;


 
Je récupère une erreur à la compilation comme quoi les types sont incompatibles, et si je fais :


 
Normal, tu dois recopier le contenu de nom dans noms => strcpy()
 

double clic a écrit :

Code :
  1. strcpy(noms[1],nom);


 
Alors là ça compile, mais à l'exécution, si je demande :
 

Code :
  1. printf("noms[1] vaut : %s",noms[1]);


 
Ca m'affiche "noms[1] vaut : "...


 
Y avait quoi dans "nom" ?
 

double clic a écrit :

Bref, puisque comme ça, ça ne marche pas, il faut faire comment ? :o
 
Merci :jap:


 
Le plus simple et le plus évolutif dans ton cas, car les informations d'un joueur ne se résumeront peut-être pas à son seul nom (par exemple un score ?), pour moi, ce serait une structure joueur contenant son nom pour commencer (il sera temps d'y ajouter des infos plus tard), et un pointeur sur cette même structure pour pouvoir créer des listes chaînées : http://mapage.noos.fr/emdel/listes_chainees.htm
 
L'avantage de ce mode de fonctionnement, c'est de pouvoir ajouter et enlever des joueurs sans gestion lourde de la mémoire, ce que même ton tableau statique ne permet pas. Et tu peux y stocker autant d'information sur le joueur que tu veux sans multiplier les variables et la gestion qui va avec, tu regroupes tout dans un seul composant.

Reply

Marsh Posté le 23-11-2007 à 17:12:41    

en fait, ici c'est un cas un peu particulier : je code un serveur, donc à chaque fois qu'un client se connecte je lance un thread, et comme ces threads doivent partager de l'information entre eux et avec le programme de départ, je vois pas grand chose d'autre que les variables globales pour faire ça.
 
et sinon, toutes les infos utiles concernant le joueur sont stockées en local dans le thread, j'ai juste besoin d'avoir les noms des joueurs en global pour pouvoir dire qui a gagné [:tinostar] bref, le truc est un peu spécifique, et le plus simple pour l'instant, ça serait de faire marcher le tableau à deux dimensions.
 
j'étudierai peut-être une solution plus élaborée par la suite si jamais le développement du projet montre qu'il y a besoin de le faire, en suivant ce que tu dis avec les listes chaînées, mais avant d'optimiser j'aimerais avoir un truc qui marche, quitte à devoir le perfectionner, donc s'il y avait moyen de faire marcher mon double tableau tout moche ça m'arrangerait bien :o
 
sinon, pour répondre à ta question, dans 'nom' j'avais une chaîne de caractères, en général j'utilise 'dawa' ou 'pouet' pour tester. si je fais :
 

Code :
  1. strcpy(nom,commande3);
  2. strcpy(noms[ident],nom);
  3. printf("Nouveau joueur : %s\n",noms[ident]);
  4. printf("Nouveau joueur : %s\n",nom);


 
j'obtiens :
 

Citation :

Nouveau joueur :
Nouveau joueur : dawa


 
:/
 
merci en tout cas :)


Message édité par double clic le 23-11-2007 à 17:13:48

---------------
Tell me why all the clowns have gone.
Reply

Marsh Posté le 23-11-2007 à 18:10:58    

double clic a écrit :


Je suis en train de coder un petit jeu, et je voudrais stocker les noms des joueurs dans un tableau global. Basiquement, mes déclarations sont les suivantes :

Code :
  1. char noms[200][20];
  2. char nom[20];


 
J'ai le nom d'un joueur donné dans la variable 'nom', et je voudrais le stocker dans une des cases du tableau 'noms'. Seulement, si je fais :
 

Code :
  1. strcpy(noms[1],nom);


 
Alors là ça compile, mais à l'exécution, si je demande :
 

Code :
  1. printf("noms[1] vaut : %s",noms[1]);


 
Ca m'affiche "noms[1] vaut : "...
 
Bref, puisque comme ça, ça ne marche pas, il faut faire comment ? :o


Bah, je ne sais pas ce que tu bricoles dans ton vrai code, mais, comme on pouvait s'y attendre, ceci fonctionne :  

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main (void)
  4. {
  5.    char noms[200][20];
  6.    char nom[20] = "dawa";
  7.    strcpy (noms[1], nom);
  8.    printf ("noms[1] vaut : %s\n", noms[1]);
  9.    return 0;
  10. }



noms[1] vaut : dawa
 
Press ENTER to continue.


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 23-11-2007 à 18:31:53    

je suis un boulet immonde, j'avais pas initialisé ma variable ident au bon endroit et ça faisait tout foirer [:psywalk]
 
merci :whistle:


---------------
Tell me why all the clowns have gone.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed