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
Bonjour, Je suis débutant en C, et je bloque sur un code.

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;

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
essaye en rajoutant le ";" de fin de ligne
fscanf(fichier, "%d;%d;%c;%s;", &a1, &a2, &hotkey, nomdeligne);
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 à 08:29
Salut,
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.
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: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
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;
}
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
Sinon, sur ton fichier d'origine avec espaces
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;
}
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
c'est a ca que je suis arrivé, et avec le fgets, il passe a la ligne automatiquement.

Merci Beaucoup pour cette aide.
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: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
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 à 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
0

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
Merci, on m'a expliquer.

Il faut extraire le texte avec fgets,
puis utiliser fscanf sur le buffer.

Maintenant c'est résolut completement.
0