Problème avec cin.getline()

monstor_rox Messages postés 18 Date d'inscription mardi 31 mai 2005 Statut Membre Dernière intervention 15 janvier 2007 - 15 janv. 2007 à 11:49
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 15 janv. 2007 à 20:08
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

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
15 janv. 2007 à 20:08
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
0
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
15 janv. 2007 à 20:08
C'est pas delete c'est free, désolé.
0
Rejoignez-nous