[C] pb avec fscanf et une structure en para
Résolu/Fermé
pierro540
Messages postés
82
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
10 mai 2011
-
14 déc. 2009 à 23:22
lami20j - 15 déc. 2009 à 03:48
lami20j - 15 déc. 2009 à 03:48
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
- Pdf structure 40 - Forum PDF
- Dans la table des matières du document à télécharger, le chapitre 6 et ses 2 sections n'apparaissent pas. trouvez l'erreur dans la structure du document et corrigez-la. mettez à jour la table des matières. quel est le mot formé par les lettres en majuscules de la table des matières après sa mise à jour ? ✓ - Forum Word
- Problème mise à jour table des matières - Forum Word
6 réponses
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
14 déc. 2009 à 23:55
14 déc. 2009 à 23:55
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
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
14 déc. 2009 à 23:41
14 déc. 2009 à 23:41
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.
pierro540
Messages postés
82
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
10 mai 2011
18
14 déc. 2009 à 23:47
14 déc. 2009 à 23:47
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
pierro540
Messages postés
82
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
10 mai 2011
18
14 déc. 2009 à 23:54
14 déc. 2009 à 23:54
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
pierro540
Messages postés
82
Date d'inscription
samedi 5 août 2006
Statut
Membre
Dernière intervention
10 mai 2011
18
15 déc. 2009 à 00:02
15 déc. 2009 à 00:02
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 !
Pacorabanix
Messages postés
3248
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
661
15 déc. 2009 à 01:22
15 déc. 2009 à 01:22
et bien je pense que c'est justement pour remettre le "curseur" de lecture au début du fichier.
Cordialement et content de t'avoir aidé
Cordialement et content de t'avoir aidé
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:~$