Problème avec les chaînes de caractères [Résolu]

Signaler
Messages postés
9
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
28 juillet 2009
-
Messages postés
9
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
28 juillet 2009
-
bonjour

j'ai un soucis depuis quelque temps c'est que j'aimerais enregistrer une chaîne de caractère comportant même des espaces dans un fichier .txt.

Je m'explique après saisie de la commande (exemple : disque dur) et la quantité, l'utilisateur peut ou pas enregistrer ce qu'il a commandé sauf que lorsque je regarde mon fichier .txt il marque seulement 4 dur et j'aimerais qu'il enresgitre 4 disque dur (par exemple).

Voila je vous remercie d'avance et si vous avez des questions concernant mon code n'hésitez pas.

7 réponses

Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Hello,
Postes ton bout de code pour voir ce qui cloche


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
9
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
28 juillet 2009

C'est un très gros bout de code je suis nouveau en C++ donc c'est un code un peu lourd

#include <vcl.h>
#include
#include <conio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main(int argc, char* argv[])
{
string Commande;
string Nom;
bool o,n,m,e,j,p;
char Res;
char Rep;
char Rec;
string Site;
char Quicommande;
int Quantite;
int Jour;
int Mois;
int Annee;
int Numero;
int JRec;
int MRec;
int ARec;
string Service;
string Ecole;


cout<<"\t\tBienvenue sur votre logiciel de suivie de commande";

cout<<"\n\n\nEntrer le nom de l'entreprise ou vous avez effectuer la commande: ";
cin>>Nom;

cout<<"\nAvez-vous commande sur le net o : oui, n : non: ";
cin>>Res;
if(Res == 'o')
{
cout<<"\nIndiquez le site: ";
cin>>Site;
}

cout<<"\nEntrer ce que vous avez commande (ne pas indiquer la quantite): ";
cin>>Commande;
std::getline(std::cin,Commande);

cout<<"\nEn quel quantite avez-vous commande: ";
cin>>Quantite;

cout<<"\nVous commande pour m : mairie, e : ecole ?";
cin>>Quicommande;
if(Quicommande == 'm')
{
cout<<"\nPour quel service: ";
cin>>Service;
}
if(Quicommande =='e')
{
cout<<"\nPour quel ecole: ";
cin>>Ecole;
}

cout<<"\nEntrez le jour de commande: ";
cin>>Jour;
cout<<"Entrez le mois de commande: ";
cin>>Mois;
cout<<"Entrez l'annee de commande: ";
cin>>Annee;
cout<<"Date de commande: "<<Jour<<"/"<<Mois<<"/"<>Numero;

cout<<"\nConnaissez-vous la date de reception ? (j : je connais la date, p : pas encor)";
cin>>Rec;

if(Rec == 'j')
{
cout<<"\nEntrez le jour de la reception : ";
cin>>JRec;
cout<<"Entrez le mois de reception: ";
cin>>MRec;
cout<<"Entrez l'annee de reception: ";
cin>>ARec;
cout<<"\nLa date de reception est prevue pour le "<<JRec<<"/"<<MRec<<"/"<>Rep;

if(Rep =='Y')
{
FILE *fichier = NULL;
fichier = fopen("donnees.txt","a+");

if (fichier != NULL)
{
fputs("\r\n\nRecapitulatif :\r\n", fichier);
fprintf(fichier, "Nom du fournisseur: %s\n",Nom);
if(Res == 'o')
{
fprintf(fichier, "Le site est : %s\r\n", Site);
}
fprintf(fichier, "Vous avez commande : %d", Quantite);
fprintf(fichier, " %s\r\n", Commande);
fprintf(fichier, "Vous avez commande le %d", Jour);
fprintf(fichier, "/ %d", Mois);
fprintf(fichier, "/ %d\r\n", Annee);
if(Rec == 'j')
{
fprintf(fichier, "Vous revevrez la commande le %d", JRec);
fprintf(fichier, "/ %d", MRec);
fprintf(fichier, "/ %d\r\n", ARec);
}
if(Rec == 'p')
{
fprintf(fichier, "Vous n'avais pas encor de date\r\n");
}
if(Quicommande == 'm')
{
fprintf(fichier, "Service %s\r\n", Service);
}
if(Quicommande =='e')
{
fprintf(fichier, "Ecole %s\r\n", Ecole);
}
fprintf(fichier, "Votre commande est le numero : %d\r\n", Numero);

fclose(fichier);

cout << "\n\necriture dans le fichier reussie\n";
}
else
{
// On affiche un message d'erreur si on veut
printf("Impossible d'ouvrir le fichier");
}
}
if(Rep =='N')
{
cout<<"La commande n'est pas enregistre";
}

system("\r\npause");

getch();
return 0;
}
Messages postés
9
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
28 juillet 2009

aidez moi s'il vous plait je pense que cela viendrait du std::getline(std::cin, Commande);

Merci
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
Hello,
Sorry, j'étais passé sur autre chose...
Ton problème peut être résolu de la manière suivante:
    cout<<"\nAvez-vous commande sur le net o : oui, n : non: ";
    cin>>Res;
    if(Res == 'o')
    {
        cout<<"\nIndiquez le site: ";
        cin>>Site;
    }
    cin.ignore(1000, '\n' );   // ceci pour vider le buffer

    cout<<"\nEntrer ce que vous avez commande (ne pas indiquer la quantite): ";
    std::getline(cin,Commande);


NB: Il n'est pas pertinent d'abuser du bouton "Réponse acceptée". Ce bouton sert à mettre en surbrillance la solution au problème.

@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
9
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
28 juillet 2009

Ah Yes ca marche merci a toi Buno tu m'enlève plus qu'une épine dans le pied.
Merci bien je peux continuer a avancer par contre pourrais-tu m'expliquer en fait ce que fait cin.ignore. (désolé mais je suis encor débutant dans le C++).
Messages postés
14982
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
2 mars 2021
94
le cin.ignore() te permet de nettoyer l'entrée standard.
tu trouveras plein d'infos sur le web (et même sur ce forum) sur les problèmes de getline() et l'utilisation de cin.ignore()


@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Messages postés
9
Date d'inscription
lundi 24 septembre 2007
Statut
Membre
Dernière intervention
28 juillet 2009

je te remercie en tout cas de m'avoir débloqué .