Probleme de matrice et chaine de caractere

Résolu
keli1 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
keli1 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je veux saisir d'abord au plus 100 ensembles de chaines de caracteres . chaque ensemble doit avoir une taille maximale égale à 32
le 100 ensembles forment une série nommeé la base B et chaque ensemble on va le considerer comme etant un element de la base tous vont etre stocker dans un tableau.voici mon code svp pouvez vous m'aider?
#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
main()  
{  
char base[100][32];  
int m,i,j,n;  
 


do  
{  
printf("donner la longueur de la base\n\n ");  
scanf("%d",&m);  
}  
while (m>100);  

for(i=0;i<m;i++)  
{  
printf("l'ensemble numero : %d\n",i);  
do  
{  
printf("donnez le nombre d'identifiant\n\n ");  
scanf("%d",&n);  
}  
while(n>33);  
printf("veuillez entrer l'ensemble d'identifiants\n\n ");  
for(j=0;j<n;j++)  
gets(&base[i][j]); 
 printf("l'element de la base est  %d\n",base[i][j]);
}  
system("pause");  
return(0);  
}  
A voir également:

2 réponses

fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,

Pas mal de choses sont à revoir.

main()<ital>
La fonction main renvoie un entier. Donc : int main(void)

<ital>while (m>100);

Cela serait mieux de vérifier également si m est négatif ou pas.
De plus j'ai l'impression que tu as inversé le 100 avec le 33.

while(n>33);
Même remarque.

gets(&s);
Attention, s est un char par une chaîne de caractères. C'est donc incompatible avec gets en l'état. De plus gets est à proscrire.
Un simple fgets() sur l'élément base[j] fera l'affaire. Pas besoin de variable s.

return(0);
Pour info, return n'est pas une fonction. Un simple return 0; fera l'affaire. Après libre à toi de choisir ;-).

Et enfin, tu n'as pas besoin de string.h.

A ta disposition, si tu as des questions.

Cdlt,

Google is your friend
0
keli1 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
Dans la fonction fgets normalement on doit lui associer en parametre le nbre de caracteres de la chaine mais dans l'enoncé de cet exercice les chaines sont quelquonque c'est à dire ils sont saisies par l'utilisateur à travers le clavier sans savoir auparavant le nombre de leur caracteres .
De plus j'ai un probleme lors de l'affichage de B[i][j] les valeurs sont erronées peux tu m'aider pour résoudre ces problemes stp?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Alors pas besoin de définir la longueur de la base. Tu sais que c'est 100 maximum, sinon ça rentre pas dans le tableau. L'utilisateur est libre de taper une chaîne plus petite. A la fin de la chaîne sera stocké un caractère terminal. Donc le strlen retournera vraiment la longueur de la chaîne (enfin, attention au fait que la touche entrée est également stocké dans la chaîne si elle a la place de loger).
Un simple fgets(base[j],sizeof *base, stdin); fera l'affaire.

De plus j'ai un probleme lors de l'affichage de B[i][j] les valeurs sont erronées peux tu m'aider pour résoudre ces problemes stp?
Ah oui, j'avais même pas lu le printf. En plus attention, il ne sera trouve pas dansla boucle for(j).
Si tu souhaites afficher la chaîne, il suffit de mettre puts(base[j]) ou printf("%s\n",base[j]); si tu souhaites afficher un numéro alors il s'agit de : printf("%i\n",j);
A toi de voir ce que tu veux.

Cordialement,
0
keli1 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
le 100 n'est pas utilisé pour le nombre de caracteres des chaines,c'est le nombre maximal des éléments de la base(c'est le nombre des ensembles d'identifiants).chacun de ces ensembles doit contenir au plus 32 chaines de caracteres saisies par l'utilisateur à travers le clavier
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Très juste, j'ai mal lu.
Beh dans ce cas-là, t'inverses dans mes remarques 100 par 32 ;-))).
L'avantage de sizeof est que mon code reste toujours bon. Il faut toujours utiliser : fgets(base[j],sizeof *base,stdin);
0
keli1 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
 
merciiiiiiiiii fiddy le probleme est résolu ;))
0