Probleme de matrice et chaine de caractere

Résolu/Fermé
keli1 Messages postés 18 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011 - Modifié par keli1 le 26/01/2011 à 21:51
keli1 Messages postés 18 Date d'inscription mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011 - 26 janv. 2011 à 23:39
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 26/01/2011 à 22:23
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 mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011
26 janv. 2011 à 22:33
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
26 janv. 2011 à 22:56
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 mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011
26 janv. 2011 à 23:07
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
Modifié par fiddy le 26/01/2011 à 23:21
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 mercredi 26 janvier 2011 Statut Membre Dernière intervention 17 février 2011
26 janv. 2011 à 23:39
merciiiiiiiiii fiddy le probleme est résolu ;))
0