[c/c++] lire des lignes en boucle jusqu'a EOF
ElianeR
Messages postés
2
Date d'inscription
Statut
Membre
Dernière intervention
-
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 9813 Date d'inscription Statut Contributeur Dernière intervention -
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 (les espaces ne doivent pas entrer dans la chaine)
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)
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.
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 (les espaces ne doivent pas entrer dans la chaine)
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)
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.
2 réponses
Oups dsl jai fait erreur. On ne doit pas éliminer les espaces.. 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é.)
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'ai pas compris ce que tu veux faire. C'est lire à partir de stdin une chaîne de caractères que tu concaténerais dans une chaîne existante et puis tu affiches le résultat après avoir lu un certain nombre de lignes. Tout d'abord, il ne s'agit pas du tout d'utiliser EOF ou feof() puisque EOF signale une fin de fichier et feof() retourne vrai quand il lit EOF à la fin d'un fichier. Ce n'est pas ce que tu devrais utiliser pour stdin. Tu devrais plutôt regarder du côté des descripteurs de fichiers et utiliser la fonction read pour lire ce qui passe dans le tube de stdin.
Voici un exemple:
Pour sortir de cette boucle infernale, tu peux lire une lettre telle que 'q' et afficher ce que tu as lu et sortir du prog.
J'espère que ça t'aidera
Cordialement,
Johnny
P.S: Dsl pour les fonctions incomplètes, mais je ne programme que sous linux et étant sous windows, je n'ai pas de manuel.