Cin.get, cin.eof ...

Signaler
Messages postés
23
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
30 mars 2007
-
Messages postés
23
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
30 mars 2007
-
Bonjour à tous,

Voila 2 jour que je me penche sur un probleme de cin.get, cin.eof et de tableaux.

Mon programme consiste a demander à l'utilisateur un texte (soit a partir d'un fichier, soit à partir du clavier), le programme enregistre le texte dans un tableau pour ensuite le traiter plus facilement c'est à dire remplacer toute la ponctuation par un espace et toute suite de plusieurs espace par un seul espace.

Je vous donne la partie qui bug du programme :

int

main (){

char tab[5000],c;

int i=0;cout <<

"Entrer votre texte : " << endl;

do{

cin.get(c);

tab[i] = c;

if(
int(c) < 65 ||
int(c) > 90 &&
int(c) < 97 ||
int(c) > 122)tab[i] =

' ';}

while(!cin.eof()); 

for(
int i=0; i"pause");

return 0;}

Dabbord, me suis je prit correctement pour enregistrer le texte dans le tableau ?
Comment puis je quitter la boucle avec cin.eof ? En effet la boucle for qui suit n'affiche pa mn tableau de caractère ce qui signifie que la boucle ne se termine jamais ?
Merci

9 réponses

Messages postés
23
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
30 mars 2007

Question subsidiaire... on fait comment pour editer le message precedant parce que la mise en page c'est pas trop sa...
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:

Ajoutes un '\0' après la boucle de saisie.
Messages postés
23
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
30 mars 2007

Ou sa exactement ?
Et sa permettrai quoi ?
Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
do

{


cin.get(c);


tab[i] = c;




if
(

int
(c) < 65 ||

int
(c) > 90 &&

int
(c) < 97 ||

int
(c) > 122)tab[i] = ' '
;



}




while
(!cin.eof());


C'est ou que tu incrémente "i" ?
Messages postés
23
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
30 mars 2007

do




{
cin.get(c);

tab[i] = c;

if(
int(c) < 65 ||
int(c) > 90 &&
int(c) < 97 ||
int(c) > 122)  // Code Ascii des caractère, cela surpimme toute acarctère                                                                                                 // non comprit entre A et Z
tab[i] = ' '
;

i++;

}while
(!cin.eof());

Je n' arrive toujours pas à comprendre comment utliser le cin.eof() et quand devient t'il true...
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
Salut:




#include <stdlib.h>
#define  MAX = 256;

int



main (){


    char
tab[MAX],c;


    int
  i=0;    cout << "Entrer votre texte : " << end;






    do




{        cin.get(c);

        tab[i] = c;

        if(int(c) < 65 || int(c) > 90 && int(c) < 97 || int(c) > 122)        tab[i++] = ' ';

    }

    while(!cin.eof());    tab [i] = '\0';

    for(int i=0; tab[i] != '\0'; i++)        cout << tab[i];

    system("pause");

    return EXIT_SUCCESS;}
Messages postés
2333
Date d'inscription
samedi 28 février 2004
Statut
Membre
Dernière intervention
26 juillet 2013
36
salut:

Je te conseille de changer le test :


if
(
int
(c) < 65 ||
int
(c) > 90 &&
int
(c) < 97 ||
int
(c) > 122)
//...

en utilisant les fonctions isalphanum et isprint.
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je n'ai jamais utilisé eof et en gros j'ai jamais compris l'utilité de ce truc. EOF vaut -1, or un fichier peut contenir la valeur -1 partout, et tous les fichiers ne se terminent pas par -1...
Je pense que pour ton problème, le mieux est d'utiliser cin.getline. Ca te permettra du même coup d'éviter un débordement de tab
Comme le dit Ombitious_Developper, tu devrais utiliser isalnum (pour le moment pour comprendre ton expression, on est obligé de savoir qui de || et && est le plus prioritaire. La moindre des choses est de mettre un minimum de parenthèses sinon tu finira par te tromper un jour)

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
23
Date d'inscription
jeudi 14 septembre 2006
Statut
Membre
Dernière intervention
30 mars 2007

J'ai finalement comprit comment utliser le cin.eof() grace à mon prof, en effet eof = End Of File. C'est lorsque l'entré standart des données n'ets pas le clavier mais un fichier.

Par exemple sous Unix lorque vous taper la commande

monprog <données.txt

Il lira les données jusqu'a la fin du fichier.