Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3157 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Tableau de chaînes de caractères

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Tableau de chaînes de caractères

n°1647843
double cli​c
Why so serious?
Posté le 23-11-2007 à 11:44:22  profilanswer
 

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.
mood
Publicité
Posté le 23-11-2007 à 11:44:22  profilanswer
 

n°1647850
Elmoricq
Modérateur
Posté le 23-11-2007 à 11:53:36  profilanswer
 

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.

n°1648100
double cli​c
Why so serious?
Posté le 23-11-2007 à 17:12:41  profilanswer
 

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.
n°1648122
Emmanuel D​elahaye
C is a sharp tool
Posté le 23-11-2007 à 18:10:58  profilanswer
 

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/
n°1648132
double cli​c
Why so serious?
Posté le 23-11-2007 à 18:31:53  profilanswer
 

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.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Tableau de chaînes de caractères

 

Sujets relatifs
INFORMIX : concaténation de chainesActiveX en vb + javascript + tableau.
Retirer des caracteres d'une chaîne...Lire un tableau de valeurs dans un fichier contenant aussi du texte
Code pour placer un tableau toujours en haut de pageproblème usort() avec un tableau de 1000 - 2000 lignes
Créer un tableau en C (très simple mais pas pour moi...)Tableau de chaînes de caractères...
Passage erroné d'un tableau de chaînes de caractères à une procédure.. 
Plus de sujets relatifs à : Tableau de chaînes de caractères


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR