[C] pb avec fscanf et une structure en para
Résolu
pierro540
Messages postés
82
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j -
lami20j -
Bonjour,
voila j'ai un probleme que j'arrive pas a résoudre, je veux enregistrer les valeurs contenus dans un fichier texte, dans une variable de type pointeur d'une structure, houlala je suis pas clair du tout ^^
voila mon code vous comprendrez mieux :
Main :
fonction.h
voila, si quelqu'un peu m'aider ce serait vraiment cool
bye !
voila j'ai un probleme que j'arrive pas a résoudre, je veux enregistrer les valeurs contenus dans un fichier texte, dans une variable de type pointeur d'une structure, houlala je suis pas clair du tout ^^
voila mon code vous comprendrez mieux :
Main :
#include <stdio.h> #include "fonction.h" int main(){ char *nf="tableau.txt"; TabS t; fonction(&t,nf); return 0; }
fonction.h
typedef struct{ int tail; int *tab; } TabS; void fonction(TabS *t , char *nf){ int i=0; int a; FILE * fp; fp = fopen(nf,"r"); while( !feof(fp)){ fscanf(fp , "%d" , &a); i++; } t->tail = i; t->tab = malloc(t->tail * sizeof(int)); while( !feof(fp)){ fscanf(fp,"%i", (t->tab)+i); /* l'erreur vient d'ici, il n'enregistre pas mes valeurs et je ne sais pas pourquoi, j'ai deja utiliser cette methode pour un scanf 'simple' et cela marche, mais avec le fscanf, ca marche plus :s */ printf("%d ",*((t->tab)+i)); i++; } fclose(fp) ; }
voila, si quelqu'un peu m'aider ce serait vraiment cool
bye !
A voir également:
- [C] pb avec fscanf et une structure en para
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Structure d'un rapport de stage - Guide
- Trouvez l'erreur dans la structure du document et corrigez-la. - Forum Word
- Erreur de mise à jour de la table des matières! ✓ - Forum Word
- Problème table des matières word titres pas pris en compte - Forum Word
6 réponses
bon mon erreur ça doit être que je n'ai pas ce fichier :P
L'utilisation de scanf et fscanf est en fait assez compliquée, ce n'est pas étonnant que cela cause des bugs.
par contre je viens de remarquer quelque chose ...
la variable i n'est pas remise à zéro pour la deuxième boucle ;)
donc débordement très probables. ---> plantage et/ou données aléatoires et erronées
L'utilisation de scanf et fscanf est en fait assez compliquée, ce n'est pas étonnant que cela cause des bugs.
par contre je viens de remarquer quelque chose ...
la variable i n'est pas remise à zéro pour la deuxième boucle ;)
donc débordement très probables. ---> plantage et/ou données aléatoires et erronées
l'erreur ne vient pas du fait que le fichier est déjà lu dans la boucle juste avant, et donc que la fin du fichier est déjà atteinte ? aucun printf ne s'affiche dans cette deuxième boucle?
PS : perso j'ai un problème bien plus grave : lorsque j'exécute ton programme il plante après quelques secondes et s'arrête tout seul avec le message "Test.exe a rencontré un problème et doit fermer..." de Windows.
PS : perso j'ai un problème bien plus grave : lorsque j'exécute ton programme il plante après quelques secondes et s'arrête tout seul avec le message "Test.exe a rencontré un problème et doit fermer..." de Windows.
Re, merci d'avoir repondu aussi vite !
je n'ai pas ton probleme d'erreur windows chez moi, par contre j'ai essayer de fermer le fichier et de le rouvrir pour le parcourir une deuxieme fois, et la j'ai l'erreur de windows, c'est un peu bizarre.
autrement il m'affiche bien quelque chose mais les valeurs ne sont pas celles de mon fichier texte
bye
je n'ai pas ton probleme d'erreur windows chez moi, par contre j'ai essayer de fermer le fichier et de le rouvrir pour le parcourir une deuxieme fois, et la j'ai l'erreur de windows, c'est un peu bizarre.
autrement il m'affiche bien quelque chose mais les valeurs ne sont pas celles de mon fichier texte
bye
oups, en fait je t'envoie tout au complet :
main
fonction.h
avec fclose(fp); suivi de fopen j'ai bien mes valeurs qui s'affiche grace a la fonction 'fonction' mais les valeurs affichées par 'affichage' elles ne sont pas bonnes, et de plus j'ai l'erreur windows.
main
#include <stdio.h> #include "fonction.h" int main(){ char *nf="tableau.txt"; TabS t; fonction(&t,nf); affichageTS(t); return 0; }
fonction.h
#include <stdio.h> typedef struct{ int tail; int *tab; } TabS; void fonction(TabS *t , char *nf){ int i=0; int a; FILE * fp; fp = fopen(nf,"r"); while( !feof(fp)){ fscanf(fp , "%d" , &a); i++; } t->tail = i; fclose(fp); fp=fopen(nf,"r"); t->tab = malloc(t->tail * sizeof(int)); while( !feof(fp)){ fscanf(fp,"%i", (t->tab)+i); printf("%d ",*((t->tab)+i)); i++; } fclose(fp) ; } void affichage(TabS t){ int i; printf("merci\naffichage\ntaille : %d\n", t.tail); for(i=0 ; i<t.tail ; i++) printf("%d %d\n", (t.tab+i), *(t.tab+i)); printf("affichage termine\n"); }
avec fclose(fp); suivi de fopen j'ai bien mes valeurs qui s'affiche grace a la fonction 'fonction' mais les valeurs affichées par 'affichage' elles ne sont pas bonnes, et de plus j'ai l'erreur windows.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
YEAHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH
merci !!! ca marche nickel maintenant !!!
l'erreur d'affichage vient du i qui n'etait pas réinitialisé, je ne l'avais pas vu :s
par contre, je ne comprend pas trop pourquoi j'ai du fermer et rouvrir le fichier pour que cela fonctionne, tu peux m'expliquer stp ?
et encore merci !
merci !!! ca marche nickel maintenant !!!
l'erreur d'affichage vient du i qui n'etait pas réinitialisé, je ne l'avais pas vu :s
par contre, je ne comprend pas trop pourquoi j'ai du fermer et rouvrir le fichier pour que cela fonctionne, tu peux m'expliquer stp ?
et encore merci !
Salut,
je ne comprend pas trop pourquoi j'ai du fermer et rouvrir le fichier pour que cela fonctionne, tu peux m'expliquer stp ?
Tu n'était pas obligé de le faire. A voir la fonction fseek.
Voici une exemple
je ne comprend pas trop pourquoi j'ai du fermer et rouvrir le fichier pour que cela fonctionne, tu peux m'expliquer stp ?
Tu n'était pas obligé de le faire. A voir la fonction fseek.
Voici une exemple
lami20j@debian:~$ cat number.txt 10 20 30 40 lami20j@debian:~$ cat number.c #include<stdio.h> #include<stdlib.h> int main() { FILE * fp; int i,j,c; int *tab; i=j=0; if(NULL==(fp = fopen("number.txt","r"))) return EXIT_FAILURE; while((c=fgetc(fp))!=EOF) if(c=='\n')++i; /* le nombre de ligne */ fseek(fp,0,SEEK_SET); /* je suis au début du fichier */ tab=malloc(i*sizeof(int)); while(j<i && !feof(fp)){ fscanf(fp,"%d",tab+j); printf("%d ",*(tab+j)); ++j; } printf("\n"); fclose(fp); free(tab); return EXIT_SUCCESS; } lami20j@debian:~$ gcc -Wall number.c lami20j@debian:~$ ./a.out 10 20 30 40 lami20j@debian:~$