Tableau c

Fermé
yaldoo - Modifié par yaldoo le 9/12/2011 à 15:24
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 10 déc. 2011 à 20:26
Bonjour,

je souhaite faire un petit programme qui demande à l'utilisateur d'entrer des noms et de les stocker par la suite dans un tableau pour ensuite les afficher.
printf("combien de noms voulez-vous stocker ? \n"); 
scanf("%d",nombre); 
for(i=0;i<nombre;i++){ 
printf("nom n°%d \n",i+1); 
scanf("%s",tab[i]); 
} 


pour les afficher je fais une boucle for mais elle me renvoi souvent des erreurs de segmentation.
Je voulais savoir aussi comment déclarer mon tableau au debut du programme.

Merci

3 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 déc. 2011 à 15:29
C'est impossible, tu ne peux pas dimensionner un tableaux si tu ne connais pas sa taille. Il faut faire un malloc entre l'acquisition du nombre et la boucle for.
0
il faudrait donc selon toi faire un
char **tableau = malloc(sizeof(char)*nombre);
au debut et ensuite faire un realloc connaissant la taille du mot apres le scanf?
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
9 déc. 2011 à 15:52
presque :
char **tableau = malloc(sizeof(char*)*nombre);
Dans un premire temps oui. ça serait tout de même plus propre qu'un tableau d'une taille arbitraire. Ensuite, forcément il faut aussi allouer chaque case de ton tableau. Par contre, là, tu ne peut pas savoir à l'avance. Je me demande s'il n'y a pas une foinction comme fget ou gets qui permet d'allouer un tableau de la taille de ce qui est lu directement.
0
en faite voici le programme que je souhaite faire.Ce code marche mais me renvoi des warning a la compilation.Tu peux le tester.Par contre si tu entre un nom qui fait plus de 4 caractères ça te renvoi des valeur fausse.Pourrais tu m'aider a pallier a ce problème?

#include <stdio.h>
#include <stdlib.h>
#include <string.h>




int main(int argc, char **argv){
int nombre_produit=0;
int nombre_traders=0;


printf("Quel est le nombre de produits sur le marché : \n");
scanf("%d",&nombre_produit);
printf("le nombre de produits est donc :%d \n",nombre_produit);
char **nom_produit=malloc(sizeof(char)*200);
int i=0;
        for(i=0;i<nombre_produit;i++){                          //boucle pour stocker le nom des produits dans un tableau
        printf("nom du produit n°%d:  \n",i+1);
        scanf("%s",&nom_produit[i]);
        }

printf("Quel est le nombre de traders : \n");
scanf("%d",&nombre_traders);
char **nom_traders=malloc(sizeof(char)*200);


        for(i=0;i<nombre_traders;i++){                  //boucle pour stocker le nom des traders dans un tableau
        printf("nom du trader n°%d:  \n",i+1);
        scanf("%s",&nom_traders[i]);

        }

        printf("test des données saisi par l'utilisateur\n");
        for(i=0;i<nombre_traders;i++){
        printf("traders n°%d:%s \n",i+1,&nom_traders[i]);
        }
        for(i=0;i<nombre_produit;i++){
        printf("produit n°%d:%s \n",i+1,&nom_produit[i]);
        }

}




je voudrais stocker les noms des traders dans un tableau et les noms des produits dans un autre ensuite les afficher pour tester.
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
10 déc. 2011 à 20:26
Les réponses sont dans mon messages précédent. Dans malloc, c'est char* ! et il faut faire un malloc pour chaque case !
0