PB Scanf()

Résolu
Signaler
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007
-
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
-
Bonjour je suis débutant en programmation,je suis en train de programmer en c++ builder,est ce que c'est possible d'utiliser scanf()?
si oui,je voudrait récuperer un mot dans une ligne.

ex de ligne:

aaaa;bbbb;cccc;dddd;eeee
ffff;gggg;hhhh;iiii;jjjj

comment je doit faire si je veut avoir le deuxième mot ds chaque ligne de mon fichier texte?
meme question pour le premier et le troisième mot de chaque ligne?
et meme question pour une ligne?

merci d'avance pour vos réponse clair vu ke je suis un débutant!!

27 réponses

Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
si toutes tes lignes ont 5 mots, tu peu faire

//longueur max d'un mot
#define MAX_LENGTH 255
//buffer pour stocker tes mots
char buffer[5][MAX_LENGTH]
//lecture des mots
fscanf(mon_fichier, "%s;%s;%s;%s\n", buffer[0], buffer[1], buffer[2], buffer[3], buffer[4]);
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
fscanf est une fonction C, tu aura surement besoin de faire un
#include <stdio.h>

si tu veu lire juste le premier mot de chaque ligne, tu as juste a faire
fscanf(mon_fichier, "%s;%s\n", buffer[0], buffer[1]);

alors buffer[0] contiendra le premier mot, et buffer[1] le reste de la ligne.
Messages postés
452
Date d'inscription
jeudi 4 décembre 2003
Statut
Membre
Dernière intervention
19 décembre 2008
15
Pour le premier mot, tu peux essayer d'utiliser scanf avec des expressions plus "avancées".
Oulala, oui, je sais, c'est un peu vide comme phrase ;)

Donc un exemple.
Pour ta ligne (les mots sont séparés par des ;)
Tu peux faire scanf("%[^;\n\0]", buffer);
Avec buffer qui est un tabeau de caractères.

Ce que j'appelais au debut expression avancée de "scanf" c'etait justement le [^].
Il existe deux expressions de ce style à ma connaissance.
[^...] permet de lire un buffer jusqu'à ce qu'on rencontre un caractère present entre crochet.
[...] permet de lit un buffer tant que les caractères sont compris entre [].
De la meme facon que pour %s, %d..., on peut aussi mettre %*[...] pour ne pas enregistrer ce que l'on vient de lire.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
heuuuuu g oublie un "%s" dans le scanf
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

ok c'est bien pour c++ builder?
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

si je veut lire seulement le premier mot de chaque ligne?
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

et pour afficher tous les premier mot j'ai juste a faire afficher le buffer?
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
ouais
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

et faire afficher le buffer c'est une methode simple ou c'est un trcu spéciale?
sa donne koi a peut près pour un affichage avec un retour a la ligne apres chaque mot?
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
fscanf(...);
printf("le mot 1 est : %s\n", buffer[0]);
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

le retour a la ligne se fera par le \n c sa?
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
exactement

tu peu aussi utiliser les stream C++

cout << buffer[0] << endl;

cout = sortie standard
<< = concatenation dans le bufferendl "\n" fin de ligne
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

je veut afficher le buffer[0] dans une liste box comment je fait parce il me dit que buffer n'est pas un membre de Tstring
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

il m'affiche aussi comme erreur:
symbole nom_de_fichier non defini
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
pour le Tstring, je connais pas JBuilder, mais il doit y avoir un moten de convertir un char* en Tstring, ou bien un moyen de lire des Tstring dans un stream.

sinon pour ton erreur, il faut que tu ouvre ton fichier !!! je pense pas qu'il puisse trouver tt seul l'endroit ou tu veu lire tes données !
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

je fait comment pour ouvrir le fichier?
sinon pour recuperer ce kil y a ds le buffer et le mettre ds une variable ?
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
je suis pas un prof non plus. pour ca, tu peu aller voir les sources du site, ou bien tu peu aller faire un tour sur developpez.com, ya des bons tutos
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

sa fonctionne pour le buffer j'ai trouver!!!!mais le seul problème c'est qu'il m'affiche uniquement la première ligne et en plus de sa pas le premeir mot mais la ligne entière voila mon code:

ListBox3->Visible=true;
FILE *lecture;

char buffer[5][MAX_LENGHT];
lecture=fopen("Messier.txt","r");
fscanf(lecture,"%s;%s\n",buffer[0],buffer[1]);
ListBox3->Items->Add((AnsiString)buffer[0]);

alors si vous avez une solution pour qu'il m'affiche le premeir mot de chaque ligne?!
Messages postés
991
Date d'inscription
samedi 25 octobre 2003
Statut
Membre
Dernière intervention
29 août 2013
7
pour afficher toute les lignes, tu as juste a faire

fopen(...)
while (!feof(lecture)) {
fscanf(...)
...
}

sinon pour le premier mot g pas dautre idee en tete.
Messages postés
15
Date d'inscription
vendredi 4 mars 2005
Statut
Membre
Dernière intervention
18 mars 2007

ok mais se code lit les premiers mot de chaque ligne ou que de la première ligne?
Et si je veut lire le deuxième ou troisième mot de chaque ligne c koi le code specifique? %[....?????????????