Zadanie 15 poziom 2
Ostatnio zmodyfikowano 2016-07-10 19:40
carlosmay |
» 2016-07-09 19:56:15 W takim wypadku ignore(); czyści mi całe "menu". |
W tym miejscu strumień jest pusty, więc metoda czeka na jakieś dane. Używaj tej metody, po wykryciu błędnych danych, oraz po użyciu operatora >> , aby oczyścić strumień przed kolejnymi danymi. edit: Napisane po swojemu (nie wg treści). Dużo nadmiarowego kodu. W każdym case sprawdzasz te same błędy. Można zrobić to raz przed instrukcją switch , a w case 'ach wykonać tylko obliczenia. Wyjątkiem jest dzielenie, gdzie trzeba sprawdzić, czy wprowadzona liczba nie jest zerem. |
|
neferx Temat założony przez niniejszego użytkownika |
» 2016-07-10 19:40:49 Napisałem całość od nowa. Teraz wszystko chyba pasuje do wzoru, w case nie ma już instrukcji dotyczących sprawdzenia błędów, za wyjątkiem case 4: , czyli dzielenia. Czy teraz jest już ok? @Edit: Coś pokopałem, ale nie wiem co. Teraz program się zamyka nawet, gdy wpisze jakies litery. Wcześniej było w porządku. @Edit2: Brakowało break; po case 0: i przez to wykonywał się default: , w którym miałem wcześniej przypisany wybor = 6 , co skutkowało nieskończoną pętlą. Doszedłem do wniosku, że po wpisaniu liter w cin >> wybor; automatycznie przypisywane jest 0 dla wybor; co powoduje zakończenie pętli, czyli zamknięcie programu. Postanowiłem wprowadzić sprawdzenie cin.good(); czy wczytywanie cin >> wybor; się powiodło i w else przypisalem wybor = 6 , tak aby nie zakończyć pętli. #include <iostream> #include <windows.h> using namespace std;
int main() { float l1, l2, wynik = 0; int wybor; bool ok1, ok2, okwybor; do { cout << "Wynik wynosi: " << wynik << endl; cout << "Wprowadz 1 liczbe: " << endl; cin.clear(); cin.sync(); cin >> l1; ok1 = cin.good(); if( ok1 == true ) { cout << "Wprowadz 2 liczbe: " << endl; cin.clear(); cin.sync(); cin >> l2; ok2 = cin.good(); if(( ok1 == true ) &&( ok2 == true ) ) { cout << "[1] Dodawanie" << endl; cout << "[2] Odejmowanie" << endl; cout << "[3] Mnozenie" << endl; cout << "[4] Dzielenie" << endl; cout << "[5] Rezygnuj" << endl; cout << "[0] Wyjscie" << endl; cin.clear(); cin.sync(); cin >> wybor; okwybor = cin.good(); system( "cls" ); if(( wybor >= 0 ) &&( wybor <= 5 ) &&( okwybor == true ) ) { switch( wybor ) { case 1: { wynik = l1 + l2; } break; case 2: { wynik = l1 - l2; } break; case 3: { wynik = l1 * l2; } break; case 4: { if( l2 != 0 ) { wynik = l1 / l2; } else { wynik = 0; cout << "Nie dzielimy przez 0!" << endl; } } break; case 5: { } break; case 0: { wybor = 0; } break; default: { cout << "Wystapil blad! Wprowadz cyfry z zakresu 0-5" << endl; } break; } } else { wybor = 6; cout << "Wprowadz cyfre z zakresu od 0 do 5" << endl; } } else { system( "cls" ); cout << "Wprowadz poprawne liczby!" << endl; } } else { system( "cls" ); cout << "Wprowadz poprawne liczby!" << endl; } } while( wybor != 0 ); cout << "Do zobaczenia!" << endl; Sleep( 500 ); return 0; }
|
|
1 « 2 » |