Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut Remplir un tableau à l'aide d'un dictionnaire en texte

    Bonjour!
    Je ne poste d'habitude pas sur ce forum mais je dois rendre mon projet sous peu alors je viens demander de l'aide.

    Je cherche, comme indiqué dans le titre, à remplir un tableau d'après un dictionnaire texte. Dans le dictionnaire, il y a un mot par ligne.
    Je vous montre mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define TAILLE_DICO 22740
    #define TAILLE_MAX 30
     
    void creer_dico(char** dico){		//Creer le tableau de mot: dico
    	FILE *fichier=NULL;
    	fichier=fopen("dictionnaire.txt","r");
    	char* mot= (char*) malloc(TAILLE_MAX*sizeof(char));
    	int i=0;
     
    	while (fscanf(fichier, "%s \n", mot) != EOF){
    		dico[i]=mot;
    		i++;
                    printf("%s",dico[i]);         //Ici dico[i] correspond bien au ième mot du fichier texte "dictionnaire.txt"
    	}
     
       	for (int k=0;k<TAILLE_DICO; k++){   //Seulement ici, dico[k] est le dernier mot du tableau, pour tout k
    		 printf("%s",dico[k]);
    	}
    }
     
    void main (){
    	char** dico;
    	dico = (char **) malloc(TAILLE_DICO*sizeof(char*));
          	creer_dico(dico);
    }
    Je ne comprends pas ce que j'ai loupé. J'aimerais savoir comment gérer les accents aussi.
    Je vous remercie d'avance pour l'aide! Bonne journée

  2. #2
    Membre expert
    Inscrit en
    mars 2005
    Messages
    1 354
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 1 354
    Points : 3 972
    Points
    3 972

    Par défaut

    Tout cela me rappelle vaguement quelque chose..

    La cause de l'erreur se trouve ligne 15 : dico[i]=mot; . Cette ligne ne fait pas ce que tu voulais probablement qu'elle fasse en l'écrivant. Je te laisse chercher un peu.


    Deux autres choses :

    • récupère et teste la valeur de retour des fonctions d'allocation (malloc..) et des appels système (fopen..) même si ce n'est que pour s'en servir dans un assert, c'est toujours mieux que rien ;
    • ne cast jamais la valeur de retour de *alloc.



    Citation Envoyé par Acajou62 Voir le message
    J'aimerais savoir comment gérer les accents aussi.
    Traitons les choses une par une, comme je l'ai précisé à ton collègue :

    Citation Envoyé par Matt_Houston Voir le message
    Citation Envoyé par Sparky95 Voir le message
    J'ai également une question concernant les caractères spéciaux pour les pseudo comment puis-je les géré n'est pas trop casse gueule en C? et y à-t-il moyen de gérer ça de manière portable?
    Autre sujet, autre thread.

  3. #3
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Merci pour votre réponse. Je crois que je manipule des pointeurs, j'ai utilisé une fonction annexe pour copier le mot dans le dico[i] mais j'ai eu "core dumbed"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void copier_tableau (char tableau1[],char tableau2[],int taille){ 	//copie le tableau 2 dans le tableau1, de même taille
    	for(int i=0; i<taille;i++)
    	{
    		tableau1[i]=tableau2[i];
    	}
     
    }

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    6 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 6 633
    Points : 18 747
    Points
    18 747
    Billets dans le blog
    1

    Par défaut

    Citation Envoyé par Acajou62 Voir le message
    j'ai utilisé une fonction annexe pour copier le mot dans le dico[i]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void copier_tableau (char tableau1[],char tableau2[],int taille){ 	//copie le tableau 2 dans le tableau1, de même taille
    	for(int i=0; i<taille;i++)
    	{
    		tableau1[i]=tableau2[i];
    	}
     
    }
    Bonjour

    La fonction standard memcpy() fait exactement ce travail. Dommage de réinventer la roue et surtout de la réinventer aussi ovale (pour les strings il y a strcpy() qui se base sur le '\0' terminant toute string ce qui évite de se coltiner la taille de la zone à copier).

    Citation Envoyé par Acajou62 Voir le message
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void main (){
    	char** dico;
    	dico = (char **) malloc(TAILLE_DICO*sizeof(char*));
          	creer_dico(dico);
    }
    mais j'ai eu "core dumbed"
    Hé oui. Tu as alloué dico comme étant un tableau de "n" pointeurs... mais les pointeurs, eux, n'ont pas été alloués. Donc tu tentes de copier les mots de ton dictionnaire dans des zones mémoires aléatoires. Et tu as eu de la chance d'avoir eu ce plantage qui te montre qu'il y a un souci car tu aurais pu avoir un code fonctionnant "par chance" mais qui aurait planté dans 10 jours (parce que la chance ça va ça vient).

    Accessoirement main n'est pas du type "void". De plus, ce serait peut-être utile de libérer mot une fois que tu n'en as plus l'utilité. Ou (encore mieux) tu aurais défini un char mot[TAILLE_MAX + 1] ça t'aurait évité ce malloc() con (quand on se casse le luc à faire du malloc, c'est vraiment qu'on ne peut pas faire autrement comme par exemple qu'on ne connait pas à l'avance la taille qu'on aura à gérer). Ce qui me fait d'ailleurs rebondir sur le malloc de dico qui tombe dans le même défaut...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    juin 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 22
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : juin 2018
    Messages : 3
    Points : 1
    Points
    1

    Par défaut

    Okay je prends les conseils en note, merci pour tout!

Discussions similaires

  1. Réponses: 12
    Dernier message: 01/12/2014, 23h40
  2. [XL-2010] Remplir un tableau à l'aide d'un formulaire avec image
    Par soso882 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/08/2014, 10h51
  3. Réponses: 3
    Dernier message: 13/04/2011, 16h07
  4. remplir un tableau dans une jsp depuis des champsde text
    Par john_wili dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 15/07/2008, 02h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo