Problème avec cin.getline()

Signaler
Messages postés
18
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
15 janvier 2007
-
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
-
Bonjour a tous

J'ai un gros problème sur le code suivant :

char* menu() {
    cout<<"[1] -  Ajouter un expediteur\n";
    cout<<"[2] -  Ajouter un destinataire principal\n";
    cout<<"[3] -  Ajouter un destinataire en copie conforme\n";
    cout<<"[4] -  Ajouter un destinataire en copie cachee\n";
    cout<<"[5] -  Ajouter une piece jointe\n";
    cout<<"[6] -  Ajouter un sujet au message\n";
    cout<<"[7] -  Saisir le message\n";
    cout<<"[8] -  Envoyer le mail\n";
    cout<<"[9] -  Revenir au menu principal\n";
    cout<<"[10] - Quitter le programme"<<endl;
    char *c= new char[3];
    cin.getline(c,sizeof(c));
    return c;
}

while(!quitter) {
            bzero(choix,sizeof(choix));
            choix = menu();
            commande=atoi(choix);
            cout<<"commande = "<<commande<<endl;
            switch(commande){
                case 1 :
                case 2 :
                case 3 :
                break;
                case 4 :
                break;
                case 5 :
                break;
                case 6 :
                break;
                case 7 :
                    if(strlen(corps) == 0) {
                        cout<<"Entrez votre message"<<endl;
                        corps = (char*)malloc(10000);
                        cin.getline(corps,sizeof(corps));
                    }
                    else {
                        char choixM;
                        choixM = menuMail(corps);
                        if(choixM == '1') {
                            cout<<"Entrez votre message"<<endl;
                            char copie[strlen(corps)];
                            strcpy(copie,corps);
                            corps = (char*)malloc(strlen(copie)+10000);
                            strcpy(corps,copie);
                            cin.getline(corps+strlen(copie),10000);
                        }
                        else if(choixM == '2') {
                            cout<<"Entrez votre message"<<endl;
                            corps = (char*)malloc(10000);
                            cin.getline(corps,sizeof(corps));
                        }
                    }
                break;
                case 8 :
                break;
                case 9 :
                    quitter = true;
                break;
                case 10 :
                    exit(0);
                break;
                default :
                    cout<<"Veuillez entrer un numero de commande valide"<<endl;
                break;
}

Alors voila quand je demande la commande 7, je tape le texte à taper et j'ai ensuite mon menu qui tourne en boucle.
Je suppose que ca vien du cin.getline() qui ne ce bloque pas car il doit avoir un \n qui traine...

Si vous avez une solution je suis preneur!!!!

2 réponses

Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
case 7 :
     if(strlen(corps) == 0) {
     cout<<"Entrez votre message"<<endl;
     corps = (char*)malloc(10000);
     cin.getline(corps,sizeof(corps));

sizeof(corps)=1 (taille d'un char*) donc le prog ne met qu'un seul caractère dans corps soit le 0 fin de chaîne et ton code tourne en boucle...
A remplacer par cin.getline(corps,10000) ou 10000*sizeof(char) si tu veux.
Autre chose: y a plein de malloc et pas de delete qui vont avec....
A chaque fois que tu fais la boucle il y a donc une GROSSE fuite mémoire (10Ko rien que ça)
->A corriger d'urgence
Messages postés
966
Date d'inscription
samedi 3 avril 2004
Statut
Membre
Dernière intervention
4 mars 2010
4
C'est pas delete c'est free, désolé.