Probleme avec fscanf .
Résolu
dragondort
Messages postés
6
Statut
Membre
-
dragondort Messages postés 6 Statut Membre -
dragondort Messages postés 6 Statut Membre -
Bonjour, Je suis débutant en C, et je bloque sur un code.
Le voila:
Mon problème vient du fscanf, je ne sais pas comment faire pour passer a la ligne suivante de mon fichier menu.ini
Il s'agence comme suit :
Le voila:
#include <stdio.h>
#include <stdlib.h>
#define MAXLONGUEURLIGNEMENU 50
int AfficherMenu(void)
{
FILE* fichier = NULL;
//char lignemenu[MAXLONGUEURLIGNEMENU];
int i;
/* Les 4 Parametre */
int a1;
int a2;
char hotkey;
char nomdeligne[MAXLONGUEURLIGNEMENU];
fichier = fopen("menu.ini", "r+");
if (fichier != NULL)
{
// On peut lire et écrire dans le fichier
printf("Ouverture réussie !!! ^^ \n\n");
i=0;
do{
fscanf(fichier, "%d;%d;%c;%s", &a1, &a2, &hotkey, nomdeligne);
//fgets(lignemenu, MAXLONGUEURLIGNEMENU, fichier);
printf("Nombre 1 : %d\nNombre 2 : %d\nHotkey : %c\nNom de la ligne : %s\n\n", a1, a2, hotkey, nomdeligne);
i++;
}while(i<3);
fclose(fichier);
}
else
{
// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier test.txt");
}
return 0;
}
Mon problème vient du fscanf, je ne sais pas comment faire pour passer a la ligne suivante de mon fichier menu.ini
Il s'agence comme suit :
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;
Configuration: Windows XP Firefox 2.0.0.14 Mon Compilateur : GCC éditeur de code : Code::Blocks
5 réponses
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;
}
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;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.