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

Fermé
ElianeR Messages postés 2 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 14 février 2007 - 14 févr. 2007 à 22:43
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 16 févr. 2007 à 09:41
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.

2 réponses

ElianeR Messages postés 2 Date d'inscription mercredi 14 février 2007 Statut Membre Dernière intervention 14 février 2007
14 févr. 2007 à 23:57
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é.)
0
jro-daemon Messages postés 10 Date d'inscription mardi 13 février 2007 Statut Membre Dernière intervention 24 février 2007 1
16 févr. 2007 à 00:44
Salut,
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:
//Rajouter les fichiers d'en-tête nécessaire
#define STDIN 0

 int master; //
FD_ZERO(&master);
FD_SET(STDIN,master); //a vérifier, pour pointeurs.
// Puis un truc du genre:
while(1)
{
  if (FD_ISSET(master,..)
 {
  read(master,(char*) chaine,..); //a vérifier aussi.
  //Puis tu concatenes ce que tu lis
 }
}

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.
0
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
16 févr. 2007 à 09:41
Salut.
Tu peux essayer un truc du genre
while (chainetemp[strlen(chainetemp)-2/*2ou 1 à tester*/]!=EOF)
{...}
En fait, tu li ta ligne et tu regarde si le dernier caractère vaut EOF.
0