C++ probleme de boucle infini

val -  
cap'tain sheeps Messages postés 491 Statut Membre -
Bonjour a tous,

Je dois programmer un vérificateur d'adresse mail j'ai un problème de boucle infini dans le int main () de mon programme:

int main ()
{

while (sortie !=0)

{
cout<<"veuillez indiquer votre adresse email"<<endl;
cin>>adresse;
cout<<adresse<<endl;
strlwr (adresse);

while (bool_erreur==0)
{

controle_caractere_1 (adresse);
if (bool_erreur==1)
break;

controle_point (adresse, strlen(adresse));
if (bool_erreur==1)
break;

prog_arobase ();
if (bool_erreur==1)
break;

extracteur (0,arobase,adresse,part1);
if (bool_erreur==1)
break;

controle_caractere (part1,strlen(part1));
if (bool_erreur==1)
break;

extracteur (arobase+1,strlen(adresse),adresse,part2);
if (bool_erreur==1)
break;

controle_caractere (part2, strlen(part2));
if (bool_erreur==1)
break;

prog_point(part2);
if (bool_erreur==1)
break;

place_point (part2);
if (bool_erreur==1)
break;

extracteur (plce_point+1,strlen(part2),part2,part3);

controleur_part3 (part3);
if (bool_erreur==1)
break;

cout<<"votre adresse est valide"<<endl;
break;
}
bool_erreur = 0;
cout<<"pour sortir du programme taper sur 0"<<endl;
cin>>sortie;
cout<<endl;

}
system ("pause");
}

Je n'arrive pas a voir a quelle moment j'ai un probleme dans mes boucles, merci pour votre aide!!

2 réponses

  1. cap'tain sheeps Messages postés 491 Statut Membre 10
     
    Salut,

    En effet, il est bizarre ton code:

    Déjà il n'y a pas de break pour les conditions if. Si tu veux renvoyer une erreur en cas de mauvais fonctionnement:

    controle_caractere_1 (adresse);
    if (bool_erreur==1)
    throw logic_error // où autre type d'erreur ça dépend de ce que ta fonction retourne comme type d'erreur... Sinon tu peux aussi ne rien mettre.
    else
    //suite du programme si tout se passe bien:
    controle_point (adresse, strlen(adresse));
    etc.

    Autre chose, si il n'y a pas d'erreur, cad si ta variable bool_erreur reste à 0, ca entrainera une boucle infinie.

    En fait je comprend pas trop pourquoi tu fais 2 boucles. Ton seul marqueur de fin est quand l'utilisateur rentre 0 ou je me trompe?

    Sheeps.

    Randy Orton a une meilleure vie que toi !
    D-D-D-D-DDDdddarck C-C-Combo ULTRA Kick Retourné flamboyant de maitre kin-chu-han
    0
  2. cap'tain sheeps Messages postés 491 Statut Membre 10
     
    En gros c'est ça que tu veux faire? :

    int main ()
    {
    while (sortie !=0)
    {
    cout<<"veuillez indiquer votre adresse email"<<endl;
    cin>>adresse;
    cout<<adresse<<endl;
    strlwr (adresse);
    
    controle_caractere_1 (adresse);
    if (bool_erreur==1){//récupération erreur
    }
    else
    controle_point (adresse, strlen(adresse));
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    prog_arobase ();
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    extracteur (0,arobase,adresse,part1);
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    controle_caractere (part1,strlen(part1));
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    extracteur (arobase+1,strlen(adresse),adresse,part2);
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    controle_caractere (part2, strlen(part2));
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    prog_point(part2);
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    place_point (part2);
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    {
    extracteur (plce_point+1,strlen(part2),part2,part3);
    controleur_part3 (part3);
    }
    
    if (bool_erreur==1){//récupération erreur
    }
    else
    cout<<"votre adresse est valide"<<endl;
    
    bool_erreur = 0;
    cout<<"pour sortir du programme taper sur 0 sinon tape ce que tu veux mais pas 0"<<endl;
    cin>>sortie;
    cout<<endl;
    
    }
    system ("pause");
    } 
    0