Se connecter avec
S'enregistrer | Connectez-vous

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

Dernière réponse : dans Programmation

: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: 
Lassé par la pub ? Créez un compte

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....

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é.)

: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: 

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"
Expert Programmation

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 ;-)
Expert Programmation

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.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde