Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
701 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [c/c++] lire des lignes en boucle jusqu'a EOF

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[c/c++] lire des lignes en boucle jusqu'a EOF

n°1514844
eliane1
Posté le 15-02-2007 à 00:15:16  profilanswer
 

Bonjour a tous!
 
Ma question est à propos du language C en particulier. (sur LINUX)
 
Je dois lire a partir de stdin un nombre n de ligne contenant des chaines de caracteres peu importe leur taille. (en fait les ligne ne doivent pas dépasser 128 caracteres individuellement)
 
Et je dois crée une unique chaine de caracteres a partir de tout ces lignes  
 
Je doit donc concatener chaque ligne en un seul char *
 
La condition de sortie de la boucle doit être EOF (sous linux je crois que cest ctrl-d pour le stdin)
 
c-a-d que si j'entre a l'écran:
 
aaa bbb ccc<enter>
ddd eee fff ggg<enter>
hhh ^D
 
ma chaine devra contenir:
 
[aaa bbb ccc ddd eee fff ggg hhh ]
 
(avec un espace entre le dernier char* et le prochain char* même s'il ny en avais pas en d'entré.)
 
J'aimerais donc savoir les solutions possibles.
 
C'est surtout le while(..... != EOF) qui me pose un probleme en fait
je ne sais pas quelle méthode utiliser. (je sais que sa peut se faire avec feof() mais cette méthode n'est vrai qu' APRES avoir rencontré EOF donc j'aurais 2 conditions a faire et sa m'embête.
 
Si quelqu'un pouvais me diriger vers une autre alternative qui fonctionnerais avec mon probleme precis sans utiliser foef() je lui en serais tres reconnaissante.
 
Merci.

mood
Publicité
Posté le 15-02-2007 à 00:15:16  profilanswer
 

n°1514854
Taz
bisounours-codeur
Posté le 15-02-2007 à 01:19:39  profilanswer
 

c'est quoi c/c++ ?

n°1515062
matafan
Posté le 15-02-2007 à 14:35:04  profilanswer
 

while (fgets(...))

n°1515098
Taz
bisounours-codeur
Posté le 15-02-2007 à 15:44:44  profilanswer
 

Même si cet usage est correct, il faut en revenir. Si la longueur de la ligne est supérieur à la taille du buffer, ça va fonctionner, mais ça va tromper le  logiciel. Bref, il est bon d'utiliser des choses comme getline si on a ça à disposition sur sa plateforme. Voire un bout de code de la bibliothèque d'ED.

n°1515260
Ange_blond
Posté le 15-02-2007 à 21:56:10  profilanswer
 

tu lis te données successivement avec un fgets (Cf. matafan plus haut).
Tu vérifie en fin de ligne la présence ou non de l'espace, (dernier caratere de la chaine test[] --> test[strlen-1]) et si y'a a pas tu l'ajoute (strcat) avec la chaine qui suis...

n°1515306
Taz
bisounours-codeur
Posté le 16-02-2007 à 00:38:12  profilanswer
 

...

n°1515321
lkolrn
&lt;comment ça marche?&gt;
Posté le 16-02-2007 à 08:15:49  profilanswer
 

lol
 
http://www.cppreference.com/stdio/getc.html
 
Tu as le droit de tout traiter comme une simple suite de caractères, ou on t'impose de vraiment lire ligne par ligne ?
 
Parce que ton énoncé est pas super clair, tu dis que tu dois lire un nombre n de lignes (facile), puis concatener chaque ligne dans une seule chaîne en remplaçant les '\0' par des ' ', mais sans préciser si oui ou non on doit déterminer chaque ligne au passage [:aloy]
 
Il est plutôt sympa ton prof, ou bof ? :whistle:

n°1515687
Trap D
Posté le 16-02-2007 à 16:55:14  profilanswer
 

Il faut aussi d'occuper de la longueur de la chaîne recevante, la gérer à coup de realloc.
A mon avis, fgetc est plus facile d'utilisation dans son cas, car il n'y a qu'à détecter le '\n' pour le transformer en espace sans s'occuper de savoir si le buffer de lecture est assez grand ou pas.

n°1515863
lkolrn
&lt;comment ça marche?&gt;
Posté le 17-02-2007 à 01:34:03  profilanswer
 

Pour la chaîne qui récupère, un comptage global au début + 1 malloc peut suffire, par contre s'il faut vraiment y aller ligne par ligne effectivement realloc s'impose.
 
PS : c'est '\n', et pas '\0' comme je l'ai marqué...

n°1515868
Taz
bisounours-codeur
Posté le 17-02-2007 à 02:09:12  profilanswer
 

ou alors tu peux arrêter le NIH

mood
Publicité
Posté le 17-02-2007 à 02:09:12  profilanswer
 

n°1515870
lkolrn
&lt;comment ça marche?&gt;
Posté le 17-02-2007 à 02:17:34  profilanswer
 

Celui des Monty Pythons ?
 
 :sweat:

n°1515885
Trap D
Posté le 17-02-2007 à 08:52:59  profilanswer
 

Tout  dépend où en est le P.O. dans son apprentissage de la programmation et le langage utilisé, C ou C++.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [c/c++] lire des lignes en boucle jusqu'a EOF

 

Sujets relatifs
Créer un tableau grâce à une boucleComment faire défiler un texte en boucle sous Flash ?
Lire un fichier textLire une chaine
[MSSQL et PHP] Problème de boucle...[Résolu][VBS Débutant Boucle Do-While-Loop Active Directory]
probleme pour lire un fichier texte avec script phpRécupérer les dernières lignes d'une table (et non les premières)
[Résolu] Comment lire un fichier .ini ?Lire resultat PHP FLASH
Plus de sujets relatifs à : [c/c++] lire des lignes en boucle jusqu'a EOF


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR