[ Poziom 2 ] [ Rozdział 18 ] praca domowa
Ostatnio zmodyfikowano 2015-07-19 10:28
carlosmay |
» 2015-07-19 02:33:37 Problem pojawi się gdy podasz niepoprawne dane. Np cin oczekuje na wartość typu int a użytkownik Oprócz liczby doda literę. Wtedy przy kolejnej pętli cin wykryje niezgodność typów i ustawi flagę błędu. Poleci następny obieg pętli bo cin nie pracuje w stanie błędu więc nie będzie czekać na wprowadzenie danych, póki Flaga błędu nie zostanie skasowana (cin.clear()), oraz bufor strumienia nie zostanie oczyszczony z niepoprawnych danych (cin.sync()).
Proponuje odpalić kalkulator i do wprowadzonej liczby dodać jakieś litery. Z reguły pętla chodzi w koło. |
|
Kisiel Temat założony przez niniejszego użytkownika |
» 2015-07-19 09:42:18 Chyba wszystko poprawione #include <iostream> using namespace std;
int main() { float a; float b; int wynik; do { cout << "Podaj pierwsza liczbe: "; cin >> a; cin.clear(); cin.sync(); cout << " Podaj druga liczbe: "; cin >> b; cin.clear(); cin.sync(); cout << " Co chcesz zrobic ?" << endl; cout << " 1 - dodaj " << endl; cout << " 2 - odejmij " << endl; cout << " 3 - pomnoz " << endl; cout << " 4 - podziel " << endl; cout << " 0 - rezygnuj " << endl; cin >> wynik; switch( wynik ) { if( a != 0 && b != 0 ) { 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: if( b == 0 ) cout << " Pamietaj cholero nie dziel przez zero " << endl; else cout << "wynik =" << a / b << endl; break; case 0: cout << "Zakonczono" << endl; } } } while( a != 0 && b != 0 && wynik != 0 ); return 0; }
|
|
BadBullPL |
» 2015-07-19 10:19:04 Zabezpiecz wcześniej napisany kalkulator przed podawaniem niepoprawnych liczb i operacji |
gdzie to? btw. To nie jest zadanie z rozdziału 18. |
|
carlosmay |
» 2015-07-19 10:28:34 Moje posty miały nakierować cię na sposób działania. Napisz prosty kalkulator, który będzie potrafił dodawać, odejmować, mnożyć i dzielić. Program ten ma działać następująco: 1. Wypisuje obecny wynik 2. Wprowadź liczbę 3. Wybierz działanie (jeżeli liczba różna od 0) 4. Wykonaj obliczenia (jeżeli liczba różna od 0) 5. Wróć do kroku 1. 6. Jeżeli wprowadzoną liczbą jest 0, zakończ program.
|
Z treści wynika, że podajesz tylko jedną liczbę. Zmienna wynik ma być wyświetlona przed działaniem, a później zaktualizowana o podaną liczbę. Wykonaj obliczenia jeśli ta jedna wprowadzona liczba jest różna od zera. Program wykonuje obliczenia i wraca na początek pętli. inicjalizujesz: int opcja = 0; float liczba = 0; float wynik = 0;
teraz do obsługi switch'a używasz zmiennej opcja. aktualizacja wyniku: dla dodawania (patrz operatory arytmetyczne). w ifie wystarczy, że a w while while( liczba != 0 && opcja != 0 )
Czyszczenie strumienia wstaw przed wprowadzeniem liczby. edit: nie zwróciłem uwagi wcześniej, to zadanie jest z rozdziału 15. Ale to szczegół. Treść zadania jest na początku postu. |
|
1 « 2 » |