avec le nouveau prototype de main, il faut retourner 0.
}
ça compile très bien (je bosse avec visual C++ 5.0) mais à l'execution ça t'as du compiler avec un compilateur C++ ou alors tu n'as pas fait
attention aux warnings.
foire . Quelle est mon erreur ? Corrige tout ça et après on en reparle.
AG
struct adresse *Lecture;
cell_t *Lecture;
Debut=NULL; FILE *Fichier;
Les déclarations de variables en C doivent êtres faites au début de la
fonction. en initialisant Debut à NULL "Debut=NULL", tu termines implicitement la zone de déclaration de variables. Il faut inverser les deux lignes. ou alors initialiser Debut lors de sa déclaration :
cell_t * Debut = NULL;
struct adresse *Lecture;
cell_t *Lecture;
Debut=NULL;
FILE *Fichier;
Les déclarations de variables en C doivent êtres faites au début de la
fonction. en initialisant Debut à NULL "Debut=NULL", tu termines
implicitement la zone de déclaration de variables. Il faut inverser les
deux lignes. ou alors initialiser Debut lors de sa déclaration :
Les déclarations de variables en C doivent êtres faites au début de la
fonction. en initialisant Debut à NULL "Debut=NULL", tu termines implicitement la zone de déclaration de variables. Il faut inverser les deux lignes. ou alors initialiser Debut lors de sa déclaration :
cell_t * Debut = NULL;
Pierre Maurette
"David Quintanel" a écrit dans le message de news: bi5361$92s$
J'ai l'intention de lire les données d'un fichier du type: David 5 Vincent 3
et de les ranger dans une liste chainée. Voici ce que g fait
ça compile très bien (je bosse avec visual C++ 5.0) mais à l'execution ça foire . Quelle est mon erreur ? PS: le prog est en C
Bonjour, Il vous faut au moins ajouter : Lecture = (struct adresse *)malloc(sizeof(struct adresse)); (tel quel, votre pointeur pointe n'importe où). avant la boucle. Remarque : c'est bizarre que ça compile chez vous, FILE *Fichier; étant placé après Debut=NULL; Pierre
"David Quintanel" <dquintanel@wanadoo.fr> a écrit dans le message de news:
bi5361$92s$1@news-reader5.wanadoo.fr...
J'ai l'intention de lire les données d'un fichier du type:
David 5
Vincent 3
et de les ranger dans une liste chainée.
Voici ce que g fait
ça compile très bien (je bosse avec visual C++ 5.0) mais à l'execution ça
foire . Quelle est mon erreur ?
PS: le prog est en C
Bonjour,
Il vous faut au moins ajouter :
Lecture = (struct adresse *)malloc(sizeof(struct adresse));
(tel quel, votre pointeur pointe n'importe où).
avant la boucle.
Remarque : c'est bizarre que ça compile chez vous, FILE *Fichier; étant
placé après Debut=NULL;
Pierre
ça compile très bien (je bosse avec visual C++ 5.0) mais à l'execution ça foire . Quelle est mon erreur ? PS: le prog est en C
Bonjour, Il vous faut au moins ajouter : Lecture = (struct adresse *)malloc(sizeof(struct adresse)); (tel quel, votre pointeur pointe n'importe où). avant la boucle. Remarque : c'est bizarre que ça compile chez vous, FILE *Fichier; étant placé après Debut=NULL; Pierre
AG
The Chameleon wrote:
struct adresse *Lecture;
cell_t *Lecture=NULL;
Avec cell_t Lecture; cell_t *Lecture et cell_t Lecture sont deux choses différentes. Il me
semble qu'il voulait un pointeur sur la structure.
il faut parser la ligne que tu lis. Elle ne va pas aller s'écrire comme il faut dans la structure.
ca serait pas mieux de faire : while(fread(&Lecture ,sizeof(Lecture),1,Fichier)&&!feof(Fichier)) Ces deux versions ne marcherons pas.
ce qui va être lu dans le fichier n'est pas au format de la structure, et fread ne le fera pas. Dans le fichier, si la premiere ligne est :
Vincent 13
il faut lire 10 caractères, et pas sizeof(Lecture) caractères.
Il faut donc stocker le résulat de la structure dans un buffer avec fread() (on pourra utiliser fgets() qui, je pense, est plus approprié).
Ensuite il faut parser ce buffer, soit avec scanf() (mais dans ce cas autant utiliser fscanf() directement, sans compter que scanf() est difficile à maitriser), soit en bouclant sur les éléments du buffer, ce qui est plus recommandé.
sinon je ne comprends pas bien ou il va placer ses données, non ? Qu'en pensez vous ? Vous avez mal lu : Lecture n'est pas une structure, mais un pointeur sur
une structure.
Alexandre, qui n'aime pas faire du parsing.
The Chameleon wrote:
struct adresse *Lecture;
cell_t *Lecture=NULL;
Avec
cell_t Lecture;
cell_t *Lecture et cell_t Lecture sont deux choses différentes. Il me
semble qu'il voulait un pointeur sur la structure.
il faut parser la ligne que tu lis. Elle ne va pas aller s'écrire comme
il faut dans la structure.
ca serait pas mieux de faire :
while(fread(&Lecture ,sizeof(Lecture),1,Fichier)&&!feof(Fichier))
Ces deux versions ne marcherons pas.
ce qui va être lu dans le fichier n'est pas au format de la structure,
et fread ne le fera pas. Dans le fichier, si la premiere ligne est :
Vincent 13
il faut lire 10 caractères, et pas sizeof(Lecture) caractères.
Il faut donc stocker le résulat de la structure dans un buffer avec
fread() (on pourra utiliser fgets() qui, je pense, est plus approprié).
Ensuite il faut parser ce buffer, soit avec scanf() (mais dans ce cas
autant utiliser fscanf() directement, sans compter que scanf() est
difficile à maitriser), soit en bouclant sur les éléments du buffer, ce
qui est plus recommandé.
sinon je ne comprends pas bien ou il va placer ses données, non ?
Qu'en pensez vous ?
Vous avez mal lu : Lecture n'est pas une structure, mais un pointeur sur
il faut parser la ligne que tu lis. Elle ne va pas aller s'écrire comme il faut dans la structure.
ca serait pas mieux de faire : while(fread(&Lecture ,sizeof(Lecture),1,Fichier)&&!feof(Fichier)) Ces deux versions ne marcherons pas.
ce qui va être lu dans le fichier n'est pas au format de la structure, et fread ne le fera pas. Dans le fichier, si la premiere ligne est :
Vincent 13
il faut lire 10 caractères, et pas sizeof(Lecture) caractères.
Il faut donc stocker le résulat de la structure dans un buffer avec fread() (on pourra utiliser fgets() qui, je pense, est plus approprié).
Ensuite il faut parser ce buffer, soit avec scanf() (mais dans ce cas autant utiliser fscanf() directement, sans compter que scanf() est difficile à maitriser), soit en bouclant sur les éléments du buffer, ce qui est plus recommandé.
sinon je ne comprends pas bien ou il va placer ses données, non ? Qu'en pensez vous ? Vous avez mal lu : Lecture n'est pas une structure, mais un pointeur sur
une structure.
Alexandre, qui n'aime pas faire du parsing.
Guillaume Leconte
On Fri, 22 Aug 2003 16:34:03 +0200, AG wrote:
Bonjour,
Debut=NULL; FILE *Fichier;
Les déclarations de variables en C doivent êtres faites au début de la
fonction. en initialisant Debut à NULL "Debut=NULL", tu termines
Pas en C99 (Ok, c'est mieux de le faire, mais c'etait pour la precision). Et c'est en debut de bloc, pas de fonction.
implicitement la zone de déclaration de variables. Il faut inverser les deux lignes. ou alors initialiser Debut lors de sa déclaration :
cell_t * Debut = NULL;
Guillaume Leconte
-- "La foule est une somme d'erreurs qu'il faut corriger." WFN
On Fri, 22 Aug 2003 16:34:03 +0200, AG wrote:
Bonjour,
Debut=NULL;
FILE *Fichier;
Les déclarations de variables en C doivent êtres faites au début de la
fonction. en initialisant Debut à NULL "Debut=NULL", tu termines
Pas en C99 (Ok, c'est mieux de le faire, mais c'etait pour la precision).
Et c'est en debut de bloc, pas de fonction.
implicitement la zone de déclaration de variables. Il faut inverser les
deux lignes. ou alors initialiser Debut lors de sa déclaration :
cell_t * Debut = NULL;
Guillaume Leconte
--
"La foule est une somme d'erreurs qu'il faut corriger." WFN
"Cyrille "cns" Szymanski" a écrit dans le message de news: ...[BlaBla]
Donner une extension .c au fichier. Que le fichier ait une extension .C, .CPP, voire .FRUNABULAX, soit je me
gourre (cas fréquent !), soit fread() reçoit un pointeur déclaré non initialisé (Lecture). Normalement, ça fait boum. Pierre
AG
Je suis assez débutant en C et je ne sais pas ce que veut dire "parser la ligne" ?
Ce n'est pas un terme spécifique au langage C. Parser une ligne c'est comme l'analyser. Tu passe en revue tout ses caractères un a un et tu en tire les informations que tu veux. Tu trouveras pleins de détails sur le net à ce propos.
Je suis assez débutant en C et je ne sais pas ce que veut dire "parser la
ligne" ?
Ce n'est pas un terme spécifique au langage C.
Parser une ligne c'est comme l'analyser. Tu passe en revue tout ses
caractères un a un et tu en tire les informations que tu veux.
Tu trouveras pleins de détails sur le net à ce propos.
Je suis assez débutant en C et je ne sais pas ce que veut dire "parser la ligne" ?
Ce n'est pas un terme spécifique au langage C. Parser une ligne c'est comme l'analyser. Tu passe en revue tout ses caractères un a un et tu en tire les informations que tu veux. Tu trouveras pleins de détails sur le net à ce propos.