Tom's Guide > Forum > Programmation > Language C : Problème avec fscanf : comment lire une ligne(avec espaces) et l'af

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

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

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à tiopai

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

Répondre à Resurectin

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

Répondre à gryphus71

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"

Répondre à tiopai

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

Répondre à CRicky

je viens de regarder
http://www.linux-france.org/articl [...] pen-3.html
et il est dit que ca sert a rien ce 'b' que c'est juste la pour assurer la compatibilité avec une ancienne norme et il ne parle pas du 't'...

Répondre à tiopai

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.

Répondre à CRicky
Tom's Guide > Forum > Programmation > Language C : Problème avec fscanf : comment lire une ligne(avec espaces) et l'af
Aller à :

Il y a 2502 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens