Rempissage d'un tableau par des chaine
amani
-
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6122 Date d'inscription Statut Contributeur Dernière intervention -
j'ai ecrit un programme en c quit permet de saisir un entier positive et qui remplir un tableau par des chaine de caractere lorsque j'a' excuté le programme je trouve que le programme ne s'arrete pas de me dommander de saisir une chaine je besion de votre aide aide moi svp voila mon programme
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,l,c;
char*ch1[60][20];
do
{ printf( "donner un entrier") ;
scanf ("%d",&n ) ;
} while (n<=0);
for (l=0;l<n;l++){
for (c=0;c<20;c++){
printf("sisir les noms de joueur de g1");
scanf("%s",&ch1[l][c]);}}
return 0;
}
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n,l,c;
char*ch1[60][20];
do
{ printf( "donner un entrier") ;
scanf ("%d",&n ) ;
} while (n<=0);
for (l=0;l<n;l++){
for (c=0;c<20;c++){
printf("sisir les noms de joueur de g1");
scanf("%s",&ch1[l][c]);}}
return 0;
}
1 réponse
-
Salut amani,
Ta saisie est répétée parce que tu utilises deux boucles for imbriquées, dont la 2ème qui multiplie par 20 le nombre de saisies.
Il y a d'autres problèmes, car ta déclarationchar*ch1[60][20];
est sans doutes fausse et tonscanf("%s",&ch1[l][c]);aussi.
Si tu veux que ton programme réserve un espace pour un tableau de 60 chaînes de caractère d'une longueur maximale de 19 caractères chacune, tu dois déclarerchar st[60][20];
Ensuite, tu désignes la chaîne 1 simplement avecst[0]
et la chaîne 60 avecst[59]
, et donc, tu n'as pas 2 indices à passer à scanf.
Note que scanf, tel que tu l'utilises, ne va pas vérifier si la saisie de l'utilisateur est valide, ni si elle ne dépasse pas la taille de chaîne pouvant être stockée.
Dal
N.B. :
char*ch1[60][20];
réserve un tableau bidimensionnel de 60x20 pointeurs sur char. Un tel type ne permet que de stocker des pointeurs sur char (1200 pointeurs sur char exactement), et pas des char.-
-
-
-
Alors ce que j'ai écris en 3ème paragraphe de ma réponse c'est :
Si tu veux que ton programme réserve un espace pour un tableau de 60 chaînes de caractère d'une longueur maximale de 19 caractères chacune, tu dois déclarer char st[60][20];
J'ai indiqué un type approprié à ma compréhension de ton besoin. Tu n'as pas confirmé, ni infirmé cette compréhension, ce qui me laisse dans l'incertitude sur ce que tu veux vraiment faire.
Explique en quoi ce type ne serait pas approprié pour toi, puisque tu aurais besoin d'un autre selon toi, le genre de type que tu voudrais pour quelles données et quels besoins, car je ne saisis pas ce que tu veux dire par "un type équivalant a ce type".
-