PB Scanf()

Résolu
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007 - 8 mars 2006 à 09:01
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 - 10 mars 2006 à 01:46
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

Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 09:21
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]);
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 09:38
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.
3
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
8 mars 2006 à 21:58
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]
3
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 09:23
heuuuuu g oublie un "%s" dans le scanf
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 09:33
ok c'est bien pour c++ builder?
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 09:35
si je veut lire seulement le premier mot de chaque ligne?
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 09:40
et pour afficher tous les premier mot j'ai juste a faire afficher le buffer?
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 09:41
ouais
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 09:44
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?
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 09:46
fscanf(...);
printf("le mot 1 est : %s\n", buffer[0]);
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 09:48
le retour a la ligne se fera par le \n c sa?
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 09:50
exactement

tu peu aussi utiliser les stream C++

cout << buffer[0] << endl;

cout = sortie standard
<< = concatenation dans le bufferendl "\n" fin de ligne
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 10:28
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
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 10:35
il m'affiche aussi comme erreur:
symbole nom_de_fichier non defini
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 10:40
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 !
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 11:22
je fait comment pour ouvrir le fichier?
sinon pour recuperer ce kil y a ds le buffer et le mettre ds une variable ?
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 13:47
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
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 13:56
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?!
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
8 mars 2006 à 14:01
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.
0
mleclaire Messages postés 15 Date d'inscription vendredi 4 mars 2005 Statut Membre Dernière intervention 18 mars 2007
8 mars 2006 à 22:23
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? %[....?????????????
0
Rejoignez-nous