Votre question

Language C : Problème avec fscanf : comment lire une ligne(avec espaces) et l'af

Tags :
  • Programmation
Dernière réponse : dans Programmation
3 Avril 2005 20:01:20

:hello: 
Salut tout le monde !!!
j'espère que vous allez pouvoir m'aider : voila, je créais une sorte de qui veut gagner des millions pour l'université mais j'ai un gros problème....
les question sont dans un fichier niv1.txt
dan le fichier txt :
-ligne 1 : question
-ligne 2 : réponse
-ligne 3 : réponse fausse

Je tape :
FILE *niv1;
char n[25];
niv1=fopen("niv1.txt","rt");
fscanf(niv1,"%s",n);
printf(chaîne : %s",n);

Le problème et que la question comporte des espaces et à l'affichage je n'ai bien sure que le premier mot de la question...comment faire ???

Et si qqn pouvait me faire un résumer clair, net et précis sur l'utilisation de fopen et fscanf ?
MERCIIIII
Salut
:hello: 

Autres pages sur : language probleme fscanf lire ligne espaces

3 Avril 2005 23:37:32

fgets...car il veut lire dans un fichier :p  (d'ailleurs il me semble que gets n'est pas du tout recommandé....)
je te conseille de faire un "man fgets" sur google ( c'esta dire que que tappes man et fgets et que tu fais rechercher....
4 Avril 2005 01:00:09

Autant faire un fread alors, si c'est pour lire des données d'un fichier ^^
J'ai pas fait gaffe, je pensais qu'il voulait saisir une variable.
(pas tout lu, gome)

(soit dit en passant, le fgets c'est très bien, ca prend tout une ligne (au max), selon la taille indiqué.)
6 Avril 2005 23:44:36

:hello: 
Merci de vos réponses bien qu'elles ne m'ai pas énormément avancés...
J'ai trouvé la solution tt seul....si ça intéresse qqn :

FILE *niv1;
char n[25];
niv1=fopen("niv1.txt","rt");
fgets(niv1,25,n);
printf(chaîne : %s",n);

il faut mettre : fgets(nom_d'ouverture_du_fichier,nombre_de_caractères_de_la_chaîne,nom_de_la_chaine);

fprintf sert à faire le chemin "inverse" : au lieu de lire les données dans le fichier, cette commande écris dans le fichier !

voilà ! Bye et encore merci au gens qui répondent aux posts ! ^^
:hello: 
7 Avril 2005 10:38:41

franchement je suis étonné que ton code marche vu que le prototype de fgets est :
char *fgets (char *s, int size, FILE *stream);

donc j'aurai plutot dit "fgets(n,25,niv1);"...

EDIT: en plus ton "rt" je crois pas que ca existe pour le fopen, c'est "r"
a b L Programmation
7 Avril 2005 11:52:30

pour le fgets () tu as raison.

pour le fopen, il faut ajouter "t" pour le mode texte et "b" pour le mode binaire.
si rien n'est précisé, ça regarde la variable globale _fmode qui est soit à O_BINARY soit à O_TEXT.
Généralement par défaut _mode vaut O_TEXT, donc le "t" n'est généralement pas utile ;-)
a b L Programmation
9 Avril 2005 12:17:23

C'est pour tous les fichiers utilisant le système POSIX (unix, linux): mettre du texte en binaire reviens au même que mettre du texte en mode texte.
Mais sous windows, le 'b' n'est pas ignoré... :-)
Probablement à cause du codage du retour à la ligne de windows.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS