Cin [Résolu]

Signaler
Messages postés
219
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011
-
Messages postés
219
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011
-
bonjours à tous,
voila j'ai cherché partout et pas moyen de trouver une solution a mon problèmme.
je vous explique, j'ais fait un programme qui ouvre un fichier, qui peux affichier ce qu'il a ouvert ,
et aussi le modifier. jusque la sa marchait au momant ou j'ai voulu modifier le fichier en tapen par exemple "salut toi";
la il m'a dit le fichier a été modifié, toi n'est pas une command. donc dans le fichier il y a que salut, après avoir cherché sur le net j'apprends que "cin" s'arrette à chaque espace, qu'il faut utiliser "getline". sauf que, quand j'utilise "getline", je ne peux  pas tapé le texte a metre dans le fichier. Il fait :
>>change //c'est la commande pour modifier le texte
le fichier "Nom du fichier" à été modifier

>>

comme si il sautait getline pour quoi?

6 réponses

Messages postés
2023
Date d'inscription
mardi 24 septembre 2002
Statut
Membre
Dernière intervention
28 juillet 2008
5
"cin" prend jsute le premier mot (s'arrete au premier espace notamment).

cin.getline(cCf, 99) pour copier au max 99 caractères dans un buffer de 100 cases. Il s'arrete pas meme si ya un espace.
Messages postés
219
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011

le code on c'est jamais


<hr />
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include "windows.h"
#include #include "ressource.h"
using namespace std;

int FileExists(char* cfname)
{
  return (GetFileAttributes(cfname) != 0xFFFFFFFF);
}

void help(){cout<<"liste de commande :\n\n open\t\t\touvre un fichier selectionn\202\n"
                <<"\n more\t\t\taffiche la selection de la command ouvrir\n\n help\t\t\t"
                <<"affiche l'aide\n\n quit\t\t\tfait quite le programme\n\n"
                <<" ccs\t\t\teffac\202 l'\202cran\n\n change\t\t\tmodifie le fichier "
                <<"selectionn\202 par la command open\n\n";}   
command O;
main()
{
char cSaisie[50];
char cCom[10];
int i=0;
ccs:
cout<<"\t\t\t\tAFDOS\t0.0.1\n";
main:
int iSwitch=0;
cout<<">>";
cin>>cCom;
if (!strcmp(cCom,"quit")){return 0;}else
if (!strcmp(cCom,"open")){iSwitch=1;}else
if (!strcmp(cCom,"more")){iSwitch=2;}else
if (!strcmp(cCom,"ccs")){iSwitch=5;}else
if (!strcmp(cCom,"change")){iSwitch=6;}else
if (!strcmp(cCom,"help"))   {iSwitch=3;}else{iSwitch=4;}

switch(iSwitch)
{
      case 1:
cout<<"\n\ntapez le nom/chemin d'axai du fichier a ouvrir\n>";
     cin>>cSaisie;
   if(FileExists(cSaisie)==true){i=1;O.open(cSaisie);}
   else{cout<<"\nchemin d'axai erron\202\n";}
           break;
      case 2:
          if(i!=0){ O.affiche();}
          else{cout<<"vous n'avez pas ouvert de fichier\n";}        
           break;
      case 3:
          help();        
           break;
      case 4:
     cout<<cCom<<" n'est pas une command\ntapez help pour la liste de command\n\n";    
           goto main;
           break;   
      case 5:
           system("CLS");
           goto ccs;
           break;    
      case 6:
         if(i!=0){O.modif(cSaisie);}
         else{cout<<"vous n'avez pas ouvert de fichier\n";}    
           break;   
           }//fin de switch
cout<<endl;
goto main;}    

<hr />
<hr />#ifndef _ressource_h
#define _ressource_h
using namespace std;
class command
       {
       public :
   
void open(  char*cName)
      {

 fStr.open(cName, fstream::in | fstream::binary); //Ouvrir le fichier en lecteur
 fStr.seekg(0, ios::end); //Trouver la fin du fichier
 iNumChrs = fStr.tellg(); //Lire le nombre d'octets
 fStr.seekg(0, ios::beg); //Revenir au début
 cBuf = new char [iNumChrs]; //Redimensionner l'espace tampon avant
 fStr.read(cBuf, iNumChrs); //d'accueilir les données
 fStr.close();    //Sans oublier de fermer le filestream
cout<<"fichier "<<cName<<" ouvert\n";
   }
            
void  affiche(){cout<<cBuf<<endl;}

int modif(char*cName)
{
  
   char cCf[MAX_PATH];
   cout<<">";
   cin>>cCf;
   ofstream Fichier(cName);
   Fichier <<cCf;
   Fichier.close();
   cout<<"\nfichier "<<cName<<" a \202t\202 modifi\202\n";
  
   cBuf=cCf;
}
private:
     int iNumChrs;
     fstream fStr;
     char *cBuf;
     };
#endif

<hr />
Messages postés
565
Date d'inscription
mercredi 19 mai 2004
Statut
Membre
Dernière intervention
30 avril 2008
1
Salut.
cBuf = new char [iNumChrs];
un new mais je ne vois pas de delete , risque de fuite mémoire il me semble.

ofstream Fichier;
Fichier.open (cName);
if (Fichier.is_open())
{
cin >> cCf;
Fichier << cCf;
Fichier.close();
cout << "\nfichier modifié\n";
}
else
{
cout << "Erreur d'acces au fichier";
}

Avec gestion d'erreur c'est mieu.

char cCf[MAX_PATH];

Je ne vois pas ou MAX_PATH a été declaré , c'est sur que si la chaine a une taille nulle ca va pas recuperer grand chose du cin , mais bon peutetre ai je des problemes de vue.

Si l'informatique été de l'alcool il y aurait des genies partout
Messages postés
219
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011

merci pour le delete j'avais pas vue, la gestion d'errore pour quoi pas mm si il peut pas utiliser la commande ten quil a pas ouvert un fichier et MAX_PATH j'ai peut être que je me trompe mais il me semble que j'ais pas besion de le déclarer et même si je met cCf[100]; c'est la même il prend que le premier mot.
Messages postés
219
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011

voila mais le problèmme est que quand je met cin.getline, il le saut je ne peux pas fair la saisie de cCf
Messages postés
219
Date d'inscription
samedi 11 août 2007
Statut
Membre
Dernière intervention
30 mai 2011

c bon j'ais trouvé sais cin>>cCom (dans main) qui était le problèmme mnt sa marche je l'ais remplacé par cin.getline comme tu ma dis merci