Cin.get, cin.eof ...

cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007 - 5 nov. 2006 à 12:03
cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007 - 6 nov. 2006 à 22:20
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

cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007
5 nov. 2006 à 12:07
Question subsidiaire... on fait comment pour editer le message precedant parce que la mise en page c'est pas trop sa...
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
5 nov. 2006 à 12:52
Salut:

Ajoutes un '\0' après la boucle de saisie.
0
cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007
5 nov. 2006 à 13:04
Ou sa exactement ?
Et sa permettrai quoi ?
0
luhtor Messages postés 2023 Date d'inscription mardi 24 septembre 2002 Statut Membre Dernière intervention 28 juillet 2008 6
5 nov. 2006 à 14:33
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" ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007
5 nov. 2006 à 14:41
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...
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
5 nov. 2006 à 15:18
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;}
0
Ombitious_Developper Messages postés 2333 Date d'inscription samedi 28 février 2004 Statut Membre Dernière intervention 26 juillet 2013 38
5 nov. 2006 à 15:20
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.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
5 nov. 2006 à 15:40
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
0
cs_Loonis Messages postés 23 Date d'inscription jeudi 14 septembre 2006 Statut Membre Dernière intervention 30 mars 2007
6 nov. 2006 à 22:20
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.
0
Rejoignez-nous