Problème avec le "swicth" (C++)

Résolu/Fermé
18sharky81 Messages postés 23 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 9 août 2012 - 11 avril 2012 à 22:40
18sharky81 Messages postés 23 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 9 août 2012 - 13 avril 2012 à 18:33
Bonjour,
j'ai un problème avec ce programme:


"#include<iostream>
#include<string>
#include<cmath>
using namespace std;

int main()
{
char program;
double a, c, b, A, B, C;

cout << "Quel programme souhaitez-vous executer?";
cout << endl << "\t" << "1: Theoreme de Pythagore.";
cout << endl << "\t" << "2: Reciproque du Theoreme de Pythagore.";
cout << endl;
cin >> program;
system("cls");

switch(program){
case'1':
char h;

cout << "Voulez-vous calculer l'hypothenuse? (o/n):\t";
cin >> h;
system("cls");

switch(h){
case'o':
/* AB= a ; AC= c ; BC= b */
cout << "Dans le triangle ABC rectangle en A, l'hypothenuse est [BC].\n\n";
cout << "\nSaisir la longueur AB:\t";
cin >> a;
cout << "\nSaisir la longueur AC:\t";
cin >> c;

A= pow(a,2);
C= pow(c,2);
sqrt(A+C);

cout << "[BC] mesure " << b << endl;
system("pause");
break;
case'O':
cout << "Dans le triangle ABC rectangle en A, l'hypothenuse est [BC].\n\n";
cout << "\nSaisir la longueur AB:\t";
cin >> a;
cout << "\nSaisir la longueur AC:\t";
cin >> c;

A= pow(a,2);
C= pow(c,2);
sqrt(A+C);

cout << "[BC] mesure " << b << endl;
system("pause");
break;

case'n':
cout << "Soit [BC] l'hypothenuse et [AB] le cote connu.\n\n";
cout << "Saisissez la longueur BC:\t";
cin >> b;
cout << endl;
cout << "Saisir la longueur AC:\t";
cin >> c;

A= pow(a,2);
B= pow(b,2);
c= sqrt(B-A);

cout << "[AC] mesure " << c;
system("pause");
break;
case'N':
cout << "Soit [BC] l'hypothenuse et [AB] le cote connu.\n\n";
system("pause");
cout << "Saisissez la longueur BC:\t";
cin >> b;
cout << endl;
cout << "Saisir la longueur AC:\t";
cin >> c;

A= pow(a,2);
B= pow(b,2);
c= sqrt(B-A);

cout << "[AC] mesure " << c;
system("pause");
break;

default:
cout << "ERREUR";
system("pause");
return 0;
break;

case'2':
cout << "Soit un triangle ABC, le cote le plus long est BC.\n\n";
cout << "Saisir la longueur AB:\t";
cin >> a;
cout << "Saisir la longueur AC:\t";
cin >> c;
cout << "Saisir la longueur BC:\t";
cin >> b;

A= pow(a,2);
B= pow(b,2);
C= pow(c,2);

if(B== A+C){
cout << "ABC est rectangle en A.";
system("pause"); }
else{
cout << "B est different de A+C, donc ABC n'est pas rectangle.";
system("pause");
}
break;
}
}
}
".

Le problème est que quand je choisis la réciproque (case'2'), le programme se ferme automatiquement.
Quelqu'un pourrait-il m'aider?
Merci d'avance.

3 réponses

scribedico Messages postés 47 Date d'inscription vendredi 13 avril 2012 Statut Membre Dernière intervention 6 mai 2013 2
Modifié par scribedico le 13/04/2012 à 18:22
salut,

comme ça , à froid, je dirais que tu as un problème d'imbrication,

tu as inclus le case '2' dans le switch ( h ) et non dans le switch (programme )

ferme le switch (h ) sous :

default:
cout << "ERREUR";
system("pause");
return 0;

--> } break;




et efface la dernière parenthèse
1
bclanet Messages postés 7 Date d'inscription vendredi 13 avril 2012 Statut Membre Dernière intervention 16 avril 2012 15
13 avril 2012 à 18:23
Salut, je pense que la source de ton problème vient du fait que ton "default" est avant le "case2" ;-)
1
18sharky81 Messages postés 23 Date d'inscription mardi 3 janvier 2012 Statut Membre Dernière intervention 9 août 2012
13 avril 2012 à 18:33
Merci beaucoup, erreur un peu bête ><"
0