Problème incompréhensible! Fichier + liste
Bonjour!
Tout d'abord voici la source :
Code:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
| #include <stdio.h>
#include <string.h>
#include <stdlib.h>
//Cette structure représente une conversion lettre--> morse
struct conversion{ char lettre;
char morse[3];
};
typedef struct conversion Convers;
//Cette structure représente un maillon de la liste.
struct element{ Convers convers;
struct element *suiv;
};
typedef struct element Element;
typedef Element *Liste;
Convers lireConversion(FILE *F)
{
Convers conv;
char lettre;
char morse[3];
char *p;
int i;
fscanf(F,"%c",lettre);
printf("lettre :%c",lettre);
conv.lettre= lettre;
fscanf(F,"%c",morse);
printf("morse :%c",morse);
for(i=0;i<3;i++)
{
conv.morse[i]=morse[i];
}
return(conv);
}
void inserFin (Convers conv, Liste *l)
{
Liste p, q;
if (*l == NULL) //Si la liste est vide, on initialise le premier élement de la liste
{ //avec l'élément donné.
p = (Element*) malloc (sizeof(Element));
p->convers = conv;
p->suiv = NULL;
*l = p;
}
else //Sinon on cherche le dernier élément de la liste puis on place l'élément donné à la suite.
{
p = *l;
//Recherche du dernier élément de la liste.
while (p->suiv != NULL){
p = p->suiv;
}
q = (Element *) malloc (sizeof(Element)); //On place notre élément à la suite.
q->convers=conv;
q->suiv=NULL;
p->suiv = q;
}
}
void afficher(Liste l)
{
Liste p=l;
while(p->suiv != NULL)
{
printf("%c %s\n",p->convers.lettre,p->convers.morse);
p= p->suiv;
}
}
Liste CreeListe()
{
FILE *fp;
Liste l = NULL;
Convers conv;
fp=fopen("source.txt","r");
if(fp==NULL) //Si le fichier n'existe pas
{
printf(" Le fichier n'existe pas \n ");
}
else //sinon on insère dans la liste chaînée
{
while (!feof(fp))
{
conv=lireConversion(fp);
inserFin(conv, &l); //On lit les informations d'une conversion puis
} //on l'insère à la fin de la liste des conversions.
}
fclose(fp);
return(l);
}
main()
{
Liste l;
l=CreeListe();
afficher(l);
} |
Voila alors j'ai comme erreur : Mon fichier source .txt contient :
Voila mon but est de mettre ce que je lis dans mon fichier dans ma structure et aussi dans l'arbre.
J'espere que vous me répondrez rapidement!
Merci d'avance
Benoît
Re: [C][DEBUTANT] Problème incompréhensible! Fichier + liste
Citation:
Envoyé par djsbens
Voila alors j'ai comme erreur :
Tu devrais apprendre à mieux configurer ton compilateur :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
Compiling: main.c
main.c:26: warning: no previous prototype for 'lireConversion'
main.c: In function `lireConversion':
main.c:33: warning: format argument is not a pointer (arg 3)
main.c:38: warning: int format, pointer arg (arg 2)
main.c:30: warning: unused variable `p'
main.c: At top level:
main.c:48: warning: no previous prototype for 'inserFin'
main.c:77: warning: no previous prototype for 'afficher'
main.c:87: warning: function declaration isn't a prototype
main.c:114: warning: return type defaults to `int'
main.c: In function `lireConversion':
main.c:26: warning: function returns an aggregate
main.c:28: warning: 'lettre' might be used uninitialized in this function
main.c: In function `CreeListe':
main.c:102: warning: function call has aggregate value
main.c: In function `main_':
main.c:118: warning: control reaches end of non-void function
Linking console executable: C:\dev\forums\OP\01.exe
Process terminated with status 0 (0 minutes, 0 seconds)
0 errors, 12 warnings |
Bref, il se passe n'importe quoi...
Commentaires, corrections, sécurisation... Je n'ai pas le fichier de donnée...
Code:
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138
|
/* -ed-
Reformattage
Suppression commentaires //
ajoute 'static' aux fonctions privees
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
/* Cette structure représente une conversion lettre--> morse */
struct conversion
{
char lettre;
char morse[3];
};
typedef struct conversion Convers;
/* Cette structure représente un maillon de la liste. */
struct element
{
Convers convers;
struct element *suiv;
};
typedef struct element Element;
typedef Element *Liste;
static Convers lireConversion(FILE *F)
{
Convers conv;
char lettre;
char morse[3];
/* -ed- non utilise
char *p;
*/
int i;
/* -ed- ajoute '&' */
fscanf(F,"%c",&lettre);
printf("lettre :%c",lettre);
conv.lettre= lettre;
/* -ed- mis "%s" */
fscanf(F,"%s",morse);
printf("morse :%s",morse);
/* -ed- et strcpy() ? */
for(i=0;i<3;i++)
{
conv.morse[i]=morse[i];
}
return(conv);
}
static void inserFin (Convers conv, Liste *l)
{
Liste p, q;
if (*l == NULL) //Si la liste est vide, on initialise le premier élement de la liste
{ //avec l'élément donné.
p = (Element*) malloc (sizeof(Element));
p->convers = conv;
p->suiv = NULL;
*l = p;
}
else //Sinon on cherche le dernier élément de la liste puis on place l'élément donné à la suite.
{
p = *l;
//Recherche du dernier élément de la liste.
while (p->suiv != NULL)
{
p = p->suiv;
}
q = (Element *) malloc (sizeof(Element)); //On place notre élément à la suite.
q->convers=conv;
q->suiv=NULL;
p->suiv = q;
}
}
static void afficher(Liste l)
{
Liste p=l;
while(p->suiv != NULL)
{
printf("%c %s\n",p->convers.lettre,p->convers.morse);
p= p->suiv;
}
}
/* -ed- ajoute void */
static Liste CreeListe(void)
{
FILE *fp;
Liste l = NULL;
Convers conv;
fp=fopen("source.txt","r");
if(fp==NULL) //Si le fichier n'existe pas
{
printf(" Le fichier n'existe pas \n ");
}
else //sinon on insère dans la liste chaînée
{
while (!feof(fp))
{
conv=lireConversion(fp);
inserFin(conv, &l); //On lit les informations d'une conversion puis
} //on l'insère à la fin de la liste des conversions.
/* -ed- deplace. fclose(NULL) = comportement indefini */
fclose(fp);
}
return(l);
}
/* -ed- ajoute int et void */
int main(void)
{
Liste l;
l=CreeListe();
/* -ed- ajoute protection */
if (l != NULL)
{
afficher(l);
}
/* -ed- ajoute */
return 0;
} |