Rechercher : dans
Par :

Probleme avec fscanf en C

Dernière réponse le 21 sep 2008 à 16:22:18 oupsman, le 21 sep 2008 à 11:26:34 
 Signaler ce message aux modérateurs

Bonjour,

J'ai un problème avec la fonction fscanf (langage C).

J'ai une ligne stckée dans un fichier texte.

Voici le contenu de la ligne : nom prenom sexe date_ de_naissance

nom et prenom sont des chianes de caracteres, sexe est un seul caractere ('H' pour Homme ou 'F' pour Femme) et date_de_naissance est aussi une chaine de caracteres sous forme de MM/DD/YY.

Dans mon programme, je veux recuperer le contenu de cette ligne et le stocker dans des variables prédéfinis.

voici le programme :

int main(void)
{
...
/*declaration des variables pour stocker les données*/
char nom[20], prenom[20], datenaissance[10];
char sexe;

/*apres avoir ouvert convenablement le fichier correspondant, voici fscanf*/
fscanf(le_fichier_ouvert, "%s %s %c %s", nom, prenom, &sexe, datenaissance);

/*jusque là tout va bien mais quand j'affiche avec printf, le contenu de la date de naissance ne s'affiche pas !!!*/
printf("\n NOM = %s \n PRENOM = %s \n SEXE = %c \n DATE DE NAISSANCE = %s \n", nom, prenom, sexe, datenaissance);

...
}

Par exemple si le contenu de la ligne était la suivante : Dubois René H 12/10/59, après execution du programme, il m'affiche :

NOM = Dubois
PRENOM = René
SEXE = H
DATE DE NAISSANCE = (ici ça reste blanc)

Quelqu'un peut m'expliquer SVP ?

Configuration: Linux
Firefox 2.0.0.16

Meilleures réponses pour « probleme avec fscanf en C » dans :
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les chaînes de caractères en C++ VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...

1

Manu, le 21 sep 2008 à 13:56:26

Bonjour,

Pour le format

printf("\n NOM = %s \n PRENOM = %s \n SEXE = %c \n DATE DE NAISSANCE = %s \n"

Vous n'auriez pas dû mettre dans votre fichier

Dubois René H 12/10/59

mais

Dubois René H
12/10/59


Manu

Répondre à Manu

2

oupsman, le 21 sep 2008 à 15:52:51

J'ai pas bien compris.
en fait ce n'est que la premiere ligne du fichier.
parce que le fichier est du style :

Dubois René H 12/10/59 /*1ère ligne*/
Chateau Vilma F 10/11/60 /*deuxieme ligne*/
Bush Georges H 11/02/58 /*troisième ligne*/
etc .....

Je suis obligé de mettre ces donnée en linéaires car je dois récupéré chaque ligne et les mettre dans des champs d'une liste chainée.

pour se faire, je lis une ligne, je récupère les données et je les stocke dans une structure définie par typedef struct{
char * nom;
char * prenom;
char sexe;
char * datenaissance;
} Personne;

Bref, à chaque ligne correspond une personne

En fait ma question était : pourquoi dans mon programme précédent je n'arrive pas à récupérer la variable datenaissance ?

Répondre à oupsman

3

dubcek, le 21 sep 2008 à 16:02:13

Hello
et en plaçant un espace à la fin de la ligne
Dubois René H 12/10/59<espace>

Répondre à dubcek

4

 oupsman, le 21 sep 2008 à 16:22:18

Merci à tous, je ne sais pas exactement ce qui s'est passé, à mon avis je me suis trompé de fichier car j'en ouvre plusieurs, je n'ai rien changé et maintenat ça fonctionne

Répondre à oupsman