Probleme avec fscanf .
Résolu/Fermé
dragondort
Messages postés
6
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
17 août 2008
-
21 mai 2008 à 00:02
dragondort Messages postés 6 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 17 août 2008 - 22 mai 2008 à 01:10
dragondort Messages postés 6 Date d'inscription mardi 20 mai 2008 Statut Membre Dernière intervention 17 août 2008 - 22 mai 2008 à 01:10
5 réponses
mype
Messages postés
2435
Date d'inscription
jeudi 1 novembre 2007
Statut
Membre
Dernière intervention
16 août 2010
436
21 mai 2008 à 01:07
21 mai 2008 à 01:07
essaye en rajoutant le ";" de fin de ligne
fscanf(fichier, "%d;%d;%c;%s;", &a1, &a2, &hotkey, nomdeligne);
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
21 mai 2008 à 11:19
21 mai 2008 à 11:19
Salut,
c'est à cause de dernier champ qui contient d'espaces, donc fscanf lit que la 1ère chaine de dernier champ
menu.ini
le code
c'est à cause de dernier champ qui contient d'espaces, donc fscanf lit que la 1ère chaine de dernier champ
menu.ini
1;0;N;[N]ouveauFichier; 1;1;O;[O]uvrir; 1;2;Q;[Q]uitter; 2;0;C;Fichier[C]; 2;1;T;Fichier[T]exte;
le code
#include <stdio.h> #include <stdlib.h> #define MAXLONGUEURLIGNEMENU 50 #include <stdio.h> #include <stdlib.h> #define MAXLONGUEURLIGNEMENU 50 int AfficherMenu (void) { FILE *fichier = NULL; int i; int a1; int a2; char hotkey; char nomdeligne[MAXLONGUEURLIGNEMENU]; fichier = fopen ("menu.ini", "r+"); if (fichier == NULL){ printf ("Impossible d'ouvrir le fichier test.txt"); return -1; } printf ("Ouverture réussie !!! ^^ \n\n"); while( fscanf (fichier, "%d;%d;%c;%s", &a1, &a2, &hotkey, nomdeligne) == 4) printf("Nombre 1 : %d\nNombre 2 : %d\nHotkey : %c\nNom de la ligne : %s\n\n", a1, a2, hotkey, nomdeligne); fclose (fichier); return 0; } int main () { AfficherMenu (); return 0; }
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
21 mai 2008 à 11:26
21 mai 2008 à 11:26
Sinon, sur ton fichier d'origine avec espaces
tu peux faire
1;0;N;[N]ouveau Fichier; 1;1;O;[O]uvrir; 1;2;Q;[Q]uitter; 2;0;C;Fichier [C]; 2;1;T;Fichier [T]exte;
tu peux faire
#include <stdio.h> #include <stdlib.h> #define MAXLONGUEURLIGNEMENU 50 #include <stdio.h> #include <stdlib.h> #define MAXLONGUEURLIGNEMENU 50 int AfficherMenu (void) { FILE *fichier = NULL; int i; int a1; int a2; char hotkey; char nomdeligne[MAXLONGUEURLIGNEMENU]; fichier = fopen ("menu.ini", "r+"); if (fichier == NULL){ printf ("Impossible d'ouvrir le fichier test.txt"); return -1; } printf ("Ouverture réussie !!! ^^ \n\n"); while( fscanf (fichier, "%d;%d;%c;", &a1, &a2, &hotkey)==3 && fgets(nomdeligne,50,fichier)!=NULL) printf("Nombre 1 : %d\nNombre 2 : %d\nHotkey : %c\nNom de la ligne : %s\n\n", a1, a2, hotkey, nomdeligne); fclose (fichier); return 0; } int main () { AfficherMenu (); return 0; }
dragondort
Messages postés
6
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
17 août 2008
21 mai 2008 à 14:38
21 mai 2008 à 14:38
c'est a ca que je suis arrivé, et avec le fgets, il passe a la ligne automatiquement.
Merci Beaucoup pour cette aide.
Merci Beaucoup pour cette aide.
dragondort
Messages postés
6
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
17 août 2008
21 mai 2008 à 14:40
21 mai 2008 à 14:40
Merci a tous.
Mon problème est résolu, mais pas totalement.
Je peut continuer mon programme, mais je ne sais toujours pas comment faire pour faire passer a la ligne suivante dans un fichier texte, sans utiliser fgets.
Donc, si quelqu'un connais la réponse, il peut toujours la poster.
Encore Merci
Mon problème est résolu, mais pas totalement.
Je peut continuer mon programme, mais je ne sais toujours pas comment faire pour faire passer a la ligne suivante dans un fichier texte, sans utiliser fgets.
Donc, si quelqu'un connais la réponse, il peut toujours la poster.
Encore Merci
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
21 mai 2008 à 15:14
21 mai 2008 à 15:14
Tant qu'il y a des espaces, tu ne pourras pas avec fscanf.
En revanche si tu remplace l'espace avec _ ça va marcher
En revanche si tu remplace l'espace avec _ ça va marcher
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
dragondort
Messages postés
6
Date d'inscription
mardi 20 mai 2008
Statut
Membre
Dernière intervention
17 août 2008
22 mai 2008 à 01:10
22 mai 2008 à 01:10
Merci, on m'a expliquer.
Il faut extraire le texte avec fgets,
puis utiliser fscanf sur le buffer.
Maintenant c'est résolut completement.
Il faut extraire le texte avec fgets,
puis utiliser fscanf sur le buffer.
Maintenant c'est résolut completement.
21 mai 2008 à 08:29
Effectivement, ça aurais pu jouer, mais ça ne fonctionne quand même pas.
Toujours un problème pour que le fscanf passe a la ligne suivante de mon fichier.