Probleme avec FILE

sidewalker
Messages postés
20
Date d'inscription
lundi 11 août 2003
Statut
Membre
Dernière intervention
11 juin 2009
- 24 oct. 2004 à 13:56
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
- 24 oct. 2004 à 18:39
J'ai un petit probleme... La compilation s'opère sans probleme mais lors de l'exécution ça ne s'affiche pas correctement.
En fait, lorsque je tape le chemin d'accès, le programme se ferme. (????)

Merci à celui qui m'aidera

printf("Veuillez specifier le chemin d'acces à votre map Ragnarok:\n");
textbackground(BLACK);
printf("# Attention, ce fichier se doit être d'extension .gat\n");
scanf("%s", &path);

// Vérification des handles
FILE * fmap;

fmap= fopen(path, "r");
if(fmap == NULL) {
printf("Echec de chargement\n");
getchar();

}
else {

printf("Fichier ouvert!");
getchar();

}

Now that's sidewalker's era

15 réponses

DeAtHCrAsH
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013

24 oct. 2004 à 14:20
Normal si tu executes le programme compilé sous windws.
Ouvre une console MS-DOS et execute le dedans.

Shell
0
DeAtHCrAsH
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013

24 oct. 2004 à 14:25
Pour t'expliquer ce qu'il se passe :
Quand tu entres le nom du fichier, tu valides en tappant ENTRER, qui valide ton choix mais qui reste aussi dans la cache.
Ensuite le getchar, récupere bel et bien le ENTRER, mais le la valide a nouveau car ENTRER equivaut à un retour chariot couplé à un retour a la ligne.

Si tu veux tout de meme pouvoir utiliser ton programme en mode GUI, tu dois vider la cache après avoir récuperer la saisie utilisateur.

Exemple:
printf("Chemin : ");
scanf("%s", &path);
fflush(stdin);
getchar(); //Tu peux aussi mettre systeme pause mais a ce compte la tu peux virer le fflush(stdin).


Shell
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
24 oct. 2004 à 15:22
Moi ce serait plutot l'instruction scanf("%s", &path); qui m'inquiéterais... Surtout quand je vois ensuite fopen(path, "r");
path est sans doute un char*, donc c'est path qu'il faut donner à scanf et pas son adresse
0
DeAtHCrAsH
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013

24 oct. 2004 à 15:43
vecchio56> ca revient au meme.
Si path est déclarée "char *path;" ou "char path[MAX_PATH]";
que tu indiques &path ou path reviens au meme, car dans les deux cas tu donnes l'adresse du premier élément de path.

Shell
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
24 oct. 2004 à 15:48
Je pense qu'il y en a un de nous deux qui n'est pas bien réveillé...
0
plus_plus_fab
Messages postés
232
Date d'inscription
vendredi 9 janvier 2004
Statut
Membre
Dernière intervention
8 janvier 2005

24 oct. 2004 à 15:49
fflush(stdin);

J'en ai marre de voir ça, ça fait au moins la 10ème fois que je vois cette idiotie, écrite par plusieurs personnes différentes qui plus est !
fflush s'applique aux flux de sortie uniquement, pour un flux d'entré, c'est indéfini !!! (probablement désastreux)
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
24 oct. 2004 à 15:52
(path == &path) vrai si path est un tableau, faux si path est un pointeur
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
24 oct. 2004 à 17:12
plus_plus_fab > entierement d'accord, je le repete moi meme souvent

le probleme c'est que ms à eu la 'bonne' idée d'implémenter fflush( ) et pas facile de faire comprendre que ce comportement n'est pas standard, donc pas portable et dangereux

on pourrait rajouter un fflush( stdout ) pour forcer l'affichage avant le scanf

et faire un fgets pour saisir une chaine et banir scanf et gets, toujours à cause du risque d'overflow
0
DeAtHCrAsH
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013

24 oct. 2004 à 17:43
FFLUSH()
Fonction : 
Vide la mémoire tampon associée à un flux.

Syntaxe : i
nt fflush(FILE *stream);

Ptototype dans : 
stdio.h

Description : 
Lorsque stream est un flux ouvert pour des sorties, fflush() entraine l'ecriture du contenu de la mémoire tampon associée au flux.

Lorque stream est un flux ouvert pour des entrées, la mémoire tampon est vidée.

Le flux stream reste ouvert après l'execution de fflush. cette fonction n'a pas d'effet sur les flux n'utilisant pas de mémoire tampon.

Valaur retournée : 
Retourne 0 si l'opération réussit et EOF lorsqu'une erreur est detectée.

Portabilité : 
Disponible sur les systèmes Unix : compatible avec la norme ANSI du langage C.


Shell
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
24 oct. 2004 à 17:47
Ou t'a trouvé ca?
0
DeAtHCrAsH
Messages postés
2670
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013

24 oct. 2004 à 18:23
Sur un bouquin de C, qu'en donne en IUT info.

Shell
0
vecchio56
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
22 août 2010
10
24 oct. 2004 à 18:27
Dans le mien c'est écrit ce disent djl et plus_plus_fab
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
24 oct. 2004 à 18:33
ce qui comte

c ansi <-> k&r ed ansi, et il est dit que fflush a un effet indeterminé sur un flux d'entré

DeAtHCrAsH > c'est quoi les references du bouquin ?
prends plutot le k&r, ya moins de mythes
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
24 oct. 2004 à 18:38
fputs( "chemin : ", stdout );
fflush( stdout );
fgets( path, sizeof path, stdin );

path doit etre un plateau
0
cs_djl
Messages postés
3011
Date d'inscription
jeudi 26 septembre 2002
Statut
Membre
Dernière intervention
27 novembre 2004
8
24 oct. 2004 à 18:39
un tableau (pas un plateau)
0