Forum Clubic

Saisie noms dans une chaine de caractere

bonjour je vous saisir dynamiquement les noms des joueurs d un petit jeu

au moment du parametrage du jeu, je dois saisir le nombre de joueurs et en fonction de ce nbre , le prog me propose de saisir les noms des joueurs un par un

je n arrive pas a creer un chaine permettant de les accueillir dans le but de les reutiliser , voila mon code

int parametre(void)
{
int nbtours,nbjoueurs,z,v,w;
char *nom[20],*nom2[20];

gotoxy(10,10);printf("Combien de joueurs desirez vous integrer a la partie ? : ");
scanf("%d",&nbjoueurs);

clrscr();

//nom = (char**)malloc(sizeof(char*)*nbjoueurs);                                          // a commenter avec alex 
                                                     
for(z=0 ; z<nbjoueurs ; z++)
{
     gotoxy(10,10);printf("Quel nom voulez vous donner au joueur %d:",z);
     scanf("%s", nom2);
     clrscr();
    // nom[z] = (char*)malloc(sizeof(char)*20);                                              // a commenter avec alex 
}        

for(v=0;v<25;v++)
{
     printf(" num %s", nom[w-1]);
     printf("\n");
}

printf("\nPOUR CONTINUER FRAPPER UNE TOUCHE.... ");

getch();
clrscr();
}

merci par avance

Tu sais quoi? C’est normal :o

  1. nom est une variable statique, nom2 itou.
  2. si tu veux faire un tableau de chaînes : char* nom[2]
  3. nom[0] = (char*) malloc(sizeof(char)*TAILLE_BUFFER); + #define TAILLE_BUFFER (20)

merci de repondre c sympa , mais je ne comprends pas , tu ne pourrais pas faire directement les modifs dans le bout de code que j ai mis au dessus stp ?

j ai essayer un tas de methodes differentes mais je ne comprends pas le nom[o] de plus c est un (char**) nan ? ( tableau a deux dim ? )

merci pour ton aide

Nope.
Je ne corrigerai pas ton code, je suis pas là pour ça.
Je veux bien t’expliquer ce qui cloche, mais pas ça.

Ton truc doit être de ce genre :

[cpp]char** names = NULL;


names = (char**) malloc( sizeof(char*) * nbjoueurs );
if ( names == NULL )
exit(0);

i = 0;
while ( i < nbjoueurs )
{
int length = 0;
char buffer[1024];
printf( “Nom joueur %d\n”, i );
fgets( buffer, 1024, stdin );
length = strlen(buffer);
length–;
while ( length >= 0 && isspace( buffer[length] ) )
length–;
if ( length >= 0 ) {
buffer[length+1] = ‘\0’;
if ( ( names[i] = (char*) malloc(sizeof(char)*(length+1)) ) == NULL ) {
while ( i >= 0 )
free(names[i–]);
free(names);
names = NULL;
exit(0);
}
strcpy(names[i], buffer);
i++;
}
}
[/cpp]

merci bcp pour ton aide , ca me depanne vraiment

voila j ai essayer de le mettre a ma sauce , mais quand je fais un scan de la chaine pour verifier l existence et l enregistrement des noms des joueurs , il me met pour chaque nom de joueur

tu as une idée , voila mon code

int parametre(void)
{
int nbtours , nbjoueurs , length = 0 , z , v , w , i ,j;
char **names,buffer[1024];

 gotoxy(10,10);printf("Combien de joueurs desirez vous integrer a la partie ? : ");
 scanf("%d",&amp;nbjoueurs);
 
 names = (char**) malloc( sizeof(char*) * nbjoueurs );

 clrscr(); 
 //if ( names == NULL )
   //exit(0);

 for(i=0;i<nbjoueurs;i++ )
 {
     gotoxy(25,5);printf( "Nom joueur %d : ", i );
     scanf("%s", &amp;buffer);
    
    getch();
    clrscr();
 }  
 
 strcpy(names[i], buffer);
   
 for(j=0;j< nbjoueurs;j++)
 {
     printf(" %s\n", names[j]); 
 }
  /* while ( length >= 0 )
   length--;
   if ( length >= 0 ) {
     buffer[length+1] = '\0';
   }     
     strcpy(names[i], buffer);
   
  }*/
 
gotoxy(20,10);printf("\nPOUR CONTINUER FRAPPER UNE TOUCHE.... ");

getch();
clrscr();
}

heu… tu es sûr d’avoir réellement adapter mon code? Hein?

Non parce que ton truc là… déjà, vire le &buffer dans le scanf, ensuite utilises les tags et (< > => [ ]).

Et dernière chose, vu que tu fais gotoxy(x,y) je me dis que c’est pour ncurses ou les commandes C Ansi , et que ça marche que sous Linux.

Alors fait toi un plaisir (sadique, je dois dire) compile avec gcc -Wall -ansi fichier.c.

Tu verras toutes tes erreurs (et c’est effroyable dés fois)

il manque pas qqch dans fenetre code ?

ele est vide , normal ?

Ouais enfin, -Wall -ansi c’est le minimum syndical quoi^^