Rechercher : dans
Par :

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

Dernière réponse le 16 fév 2007 à 09:41:59 ElianeR, le 14 fév 2007 à 22:43:35 
 Signaler ce message aux modérateurs

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.

Configuration: Windows XP
Firefox 1.5.0.9

Meilleures réponses pour « [c/c++] lire des lignes en boucle jusqu'a EOF » dans :
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Télécharger Slide Freebie VoirSlide Freebie est une visionneuse d'images (animées ou non). Il suffit de glisser/déposer le dossier contenant les images sur son icône. Il permet de faire défiler automatiquement et en boucle jusqu'à 15 000 images dans des sous-dossiers, de les...
Langage C - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
Langage C++ - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle ? On appelle structure conditionnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...

1

ElianeR, le 14 fév 2007 à 23:57:39

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é.)

Répondre à ElianeR

2

jro-daemon, le 16 fév 2007 à 00:44:28

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.

Répondre à jro-daemon

3

 Char Snipeur, le 16 fév 2007 à 09:41:59

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. Salutation !
Char Snipeur

Répondre à Char Snipeur
Collection CommentÇaMarche.net