C++ pętla do...while działa tylko podczas pierwszego wyboru w switch case
Ostatnio zmodyfikowano 2014-02-05 17:57
Robek94 Temat założony przez niniejszego użytkownika |
C++ pętla do...while działa tylko podczas pierwszego wyboru w switch case » 2014-02-05 15:17:23 Próbuje napisać kalkulator matematyczny liczący nie tylko działania ale i pola figur. Na początku kiedy wybierze się liczbę większą niż 2 (na początku można wybrać: [1]kalkulator, [2]kwadrat) pojawia się napis "Liczba niepoprawna podaj od 1 do 2". Oczywiście jeśli wybierze się 1 lub 2 działa jak należy. Problem w tym, że pętla odpowiadająca za "Liczbę niepoprawną" działa tylko na początku. Dalej są zastosowane 2 takie pętle i niestety po wpisaniu niepoprawnej liczby program przechodzi do "Co dalej [1]licz dalej, [2]zakończ. Proszę o pomoc. #include <iostream> #include <cstdlib> #include <windows.h>
using namespace std;
int main() { HANDLE hOut; hOut = GetStdHandle( STD_OUTPUT_HANDLE ); int wybor, liczba, liczba2, liczba3, koniec; float a, b; do { SetConsoleTextAttribute( hOut, BACKGROUND_RED ); cout << "KALKULATOR\n\n"; SetConsoleTextAttribute( hOut, FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_RED ); cout << "\n[1] - kalkulator" << "\n[2] - obwod kwadratu" << "\n\nPodaj numer: "; cin.clear(); cin.sync(); cin >> liczba; if( liczba > 2 ) do { cout << "\n\nNumer niepoprawny.\n\nPodaj numer od 1 do 2: "; cin.clear(); cin.sync(); cin >> liczba; } while( liczba > 2 ); switch( liczba ) { case 1: { cout << "\n[1] - dodawanie " << "\n[2] - odejmowanie" << "\n[3] - mnozenie" << "\n[4] - dzielenie" << "\n\nPodaj numer: "; cin.clear(); cin.sync(); cin >> liczba2; if( liczba > 4 ) do { cout << "\n\nNumer niepoprawny.\nPodaj numer od 1 do 4: "; cin.clear(); cin.sync(); cin >> liczba2; } while( liczba > 4 ); switch( liczba2 ) { case 1: { cout << "\n*******************************************\n\t\tDODAWANIE\n*******************************************\n" << "\nPierwsza liczba: "; cin.clear(); cin.sync(); cin >> a; cout << "Druga liczba: "; cin.clear(); cin.sync(); cin >> b; cout << "\nWynik: " << a + b << "\n-------------------------------------------\n\n\n"; break; } case 2: { cout << "\n*******************************************\n\t\tODEJMOWANIE\n*******************************************\n" << "\nPierwsza liczba: "; cin.clear(); cin.sync(); cin >> a; cout << "Druga liczba: "; cin.clear(); cin.sync(); cin >> b; cout << "\nWynik: " << a - b << "\n-------------------------------------------\n\n\n"; break; } case 3: { cout << "\n*******************************************\n\t\tMNOZENIE\n*******************************************\n" << "\nPierwsza liczba: "; cin.clear(); cin.sync(); cin >> a; cout << "Druga liczba: "; cin.clear(); cin.sync(); cin >> b; cout << "\nWynik: " << a * b << "\n-------------------------------------------\n\n\n"; break; } case 4: { cout << "\n*******************************************\n\t\tDZIELENIE\n*******************************************\n" << "\nPierwsza liczba: "; cin.clear(); cin.sync(); cin >> a; cout << "Druga liczba: "; cin.clear(); cin.sync(); cin >> b; if( b == 0 ) do { cout << "\nNie mozna dzielic przez 0. \nPodaj inna liczbe: "; cin.clear(); cin.sync(); cin >> b; } while( b == 0 ); cout << "\nWynik: " << a / b << "\n-------------------------------------------\n\n\n"; break; } } break; } case 2: { cout << "\n[1] - obwod" << "\n[2] - pole" << "\n\nPodaj numer: "; cin.clear(); cin.sync(); cin >> liczba3; if( liczba > 2 ) do { cout << "\n\nNumer niepoprawny.\nPodaj numer od 1 do 2: "; cin.clear(); cin.sync(); cin >> liczba3; } while( liczba > 2 ); switch( liczba3 ) { case 1: { cout << "\n*******************************************\n\t\tOBWOD KWADRATU\n*******************************************\n" << "\nPodaj a: "; cin.clear(); cin.sync(); cin >> a; cout << "\nWynik: " << 4 * a << "\n-------------------------------------------\n\n\n"; break; } case 2: { cout << "\n*******************************************\n\t\tPOLE KWADRATU\n*******************************************\n" << "\nPodaj a: "; cin.clear(); cin.sync(); cin >> a; cout << "\nWynik: " << a * a << "\n-------------------------------------------\n\n\n"; break; } } break; } } cout << "\n*******************************************\n\t\tCO TERAZ?\n*******************************************\n"; cout << "\n[1] - licz dalej\n[2] - zakoncz \n\nCo wybierasz: "; cin >> koniec; system( "cls" ); } while( koniec != 2 ); return 0; }[ / code ] |
|
alixir |
» 2014-02-05 17:16:54 W dalszej części wczytujesz do zmiennej "liczba2", ale warunki i pętle nadal opierają się na zmiennej "liczba" |
|
Robek94 Temat założony przez niniejszego użytkownika |
» 2014-02-05 17:57:07 Serdecznie dziękuję za pomoc. Aż wstyd było pytać o taki banał. |
|
« 1 » |