Badyl Temat założony przez niniejszego użytkownika |
Pętla do... while - kalkulator » 2015-12-17 11:20:49 Witam Nie lubie zakładać nowych tematów, które gdzieś tam się już pochowały na forum, ale niestety brak wyszukiwarki jest bardzo uciążliwy w szukaniu odpowiedzi na pytania. Mam problem z pętlą. Mianowicie chce wywołać taki efekt w kalkulatorze, że jeśli zostanie wpisana litera zamiast liczby to program nie wysypie się i wyswietlając wszystko do końca. Tylko cofałby się do poprzedniej instrukcji tj. Podaj pierwsza liczbe: Poniżej zamieszczam kod. Przy prosbie podania pierwszej liczby caly czas probuje rozwiązać ten problem. Jak juz go rozwiąże to wprowadze go do instrukcji o podanie drugiej liczby. Problem zaczyna sie od 12 linijki. Prosze o pomoc xD #include <iostream> using namespace std; int main() { cout << "\t\t\tKALKULATOR wersja 1.0" << endl << endl; cout << "1) Dodawanie" << endl; cout << "2) Odejmowanie" << endl; cout << "3) Mnozenie" << endl; cout << "4) Dzielenie" << endl; cout << "\n\n W pozniejszym czasie bedziesz poproszony/a o w.w. nr dzialania, ktory bedziesz chcial/a wykonac." << endl; cout << "\nPodaj pierwsza liczbe - "; float a; cin >> a; cin.sync(); cin.clear(); if( cin.good() ) cout << " Wpisales/as poprawnie. Lecimy dalej..."; else do { cout << "Wystarczylo wpisac liczbe... Podaj pierwsza liczbe - "; cin >> a; cin.sync(); cin.clear(); } while( !( cin >> a ) ); cout << "\nPodaj druga liczbe - "; float b; cin >> b; cin.sync(); cin.clear(); if( cin.good() ) cout << " Wpisales/as poprawnie. Lecimy dalej..."; else do { cout << "Wystarczylo wpisac liczbe..."; } while( b > 0 ); cout << " \nWiec zadecydowales/as. Pierwsza liczba to - " << a << ", a druga - " << b << endl; cout << " Majac owe liczby, ktore dzialanie matematyczne bedziesz chcial/a wykonac ? ( podaj nr ) " << endl; int dzialanie; cin >> dzialanie; switch( dzialanie ) { case 1: cout << "Wynik = " << a + b << endl; break; case 2: cout << "Wynik = " << a - b << endl; break; case 3: cout << "Wynik = " << a * b << endl; break; case 4: cout << "Wynik = " << a / b << endl; break; default: cout << " Przykro mi, ale zla liczbe wpisales/as tym samym zle rownanie wybrales/as. Zegnam"; break; } return 0; }
|
|
carlosmay |
» 2015-12-17 11:36:29 while( !( cin >> liczba; ) ) { }
|
|
Badyl Temat założony przez niniejszego użytkownika |
» 2015-12-17 22:47:04 C / C++ while( !( cin >> liczba; ) ) { }
Nie rozumie co chciales mi przekazac piszac to. Wiem, ze problem tkwi w whille tylko nie wiem co wpisac aby petla cofala sie do zadania liczby. |
|
Andy20 |
» 2015-12-17 22:54:16 Pętla While będzie się wykonywać dopóki nie podasz liczby. |
|
carlosmay |
» 2015-12-17 23:24:10 Nie rozumie co chciales mi przekazac piszac to. |
Szybciej będzie napisać dodatkowe dwie linie kodu i sprawdzić jak to działa niż czekać na odpowiedź. Wiem, ze problem tkwi w whille tylko nie wiem co wpisac aby petla cofala sie do zadania liczby. |
Ten kod właśnie to robi. |
|
Badyl Temat założony przez niniejszego użytkownika |
» 2015-12-26 01:08:53 #include <iostream> using namespace std; int main() { float a, b; cout << "Podaj pierwsza liczbe - "; cin >> a; if( cin.fail() ) do { cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - "; cin.clear(); cin.sync(); } while( !( cin >> a ) ); cout << "Pierwasza liczba to - " << a << endl; cout << "Podaj druga liczbe - "; cin >> b; if( cin.fail() ) do { cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - "; cin.clear(); cin.sync(); } while( !( cin >> b ) ); cout << "Druga liczba to - " << b << endl; return 0; }
W koncu to zrozumialem i teraz pojdzie z gorki ;) dziekuje za pomoc i zamykam temat |
|
carlosmay |
» 2015-12-26 01:29:54 W koncu to zrozumialem cout << "Podaj pierwsza liczbe - "; cin >> a; if( cin.fail() ) do { cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - "; cin.clear(); cin.sync(); } while( !( cin >> a ) );
|
To dobrze. Ten kod można zapisać, krócej wg wskazówki. cout << "Podaj pierwsza liczbe - "; while( !( cin >> a ) ) { cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - "; cin.clear(); cin.sync(); }
|
|
Badyl Temat założony przez niniejszego użytkownika |
» 2015-12-26 20:30:31 Napisałem taki kalkulator : #include <iostream> using namespace std; int main() { float a, b, wynik; int dzialanie; cout << " \t\t\tKalkulator wersja 1.1" << endl << endl; do { cout << "\n\nPodaj pierwsza liczbe - "; while( !( cin >> a ) ) { cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - "; cin.clear(); cin.sync(); } cout << "Pierwasza liczba to - " << a << endl << endl; cout << "Podaj druga liczbe - "; while( !( cin >> b ) ) { cout << "Podaj poprawna liczbe, a nie wypisuj pierdol - "; cin.clear(); cin.sync(); } cout << "Druga liczba to - " << b << endl << endl; cout << "\t\t\tMozliwe dzialania:" << endl << endl; cout << " [1] Dodawanie\t[2] Odejmowanie" << endl; cout << " [3] Mnozenie \t[4] Dzielenie" << endl; cout << " [5] Rezygnuje" << endl; cout << "\nKtore dzialanie chcesz wykonac na tych liczbach ? - "; while( !( cin >> dzialanie ) ) { cout << "Podaj nr dzialania - "; cin.clear(); cin.sync(); } switch( dzialanie ) { case 1: cout << a << " + " << b << " = " << a + b; break; case 2: cout << a << " - " << b << " = " << a - b; break; case 3: cout << a << " * " << b << " = " << a * b; break; case 4: if( b == 0 ) { cout << " \n\nNie dzieli sie przez ZERO - ZEGNAM !\n\n"; return 0; } cout << a << " : " << b << " = " << a / b; break; case 5: cout << "\n\n\t\t\tDo nastepnego razu" << endl << endl; return 0; break; default: cout << "\n\n Wystarczy wybrac nr 1-5 odpowiadajacy konkretnemu dzialaniu.\n\n"; return 0; } } while( cin != 0 ); return 0; }
Mam jeszcze tylko jedna zagwozdke. Kalkulator ma wszystkie zabezpieczenia od niewłaściwych wpisywań z wyjatkiem jednej petli. Jesli wybierzemy numer niewlasciwego dzialania np 6, ktorego nie ma to jak zastosowac petle aby jeszcze raz zapytal nas o nr dzialania ? Jestem otwarty na sugestie xD |
|
« 1 » 2 |