[Lekcja 17] zad 2
Ostatnio zmodyfikowano 2012-02-23 12:35
Asharoth Temat założony przez niniejszego użytkownika |
[Lekcja 17] zad 2 » 2012-02-22 10:22:59 Mam taki problem a mianowicie po kompilacji programu niby wszystko chodzi dobrze ale po wybraniu "[5] Od nowa" pojawia się problem a mianowicie jeżeli wtedy podamy mu literę zamiast liczby program się tak jakby pauzuje czy coś z kolei jeżeli po wykonaniu obliczeń np dodawania podamy literę program to traktuje jako wybranie poprzedniego działania czyli dodawania tylko że wtedy zgodnie z kodem wchodzi w wariant dodawania liczby do poprzedniego wyniku a powinien (przynajmniej mi się tak wydaje) w default: cout << "Sprobuj jeszcze raz" << endl << endl; wynik = 0; break;
Wie ktoś o co mu chodzi ? #include <iostream> #include <conio.h> #include <cstdlib> using namespace std;
int dd_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Dodawanie " << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; cin.fail(); } while( cin.fail() == true ); return wynik + a; } else do { cin.clear(); cin.sync(); cout << "Dodawanie " << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cin.fail(); cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; cin.fail(); } while( cin.fail() == true ); return a + b; } int od_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Odejmowanie " << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; cin.fail(); } while( cin.fail() == true ); return wynik - a; } else do { cin.clear(); cin.sync(); cout << "Odejmowanie " << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cin.fail(); cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; cin.fail(); } while( cin.fail() == true ); return a - b; } int mn_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Mnozenie" << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; cin.fail(); } while( cin.fail() == true ); return wynik * a; } else do { cin.clear(); cin.sync(); cout << "Mnozenie" << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cin.fail(); cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; cin.fail(); } while( cin.fail() == true ); return a * b; } int dz_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Dzielenie" << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; cin.fail(); } while( cin.fail() == true ); return wynik / a; } else do { cin.clear(); cin.sync(); cout << "Dzielenie" << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cin.fail(); cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; cin.fail(); } while( cin.fail() == true ); return a / b; } int wynik = 0; int wyb; int main()
{ cout << "\t===Kalkulator===" << endl << endl; do { getch(); system( "cls" ); cout << "\t[0] Koniec Programu" << endl; cout << "\t[1] Dodawanie" << endl; cout << "\t[2] Odejmowanie" << endl; cout << "\t[3] Mnozenie" << endl; cout << "\t[4] Dzielenie" << endl; cout << "\t[5] Od Nowa" << endl; cin >> wyb; switch( wyb ) { case 0: cout << "Koniec!"; return( 0 ); break; case 1: { int dodawanie = dd_1( wynik ); cout << "Wynik z dodawania = " << dodawanie << endl << endl; wynik = dodawanie; break; } case 2: { int odejmowanie = od_1( wynik ); cout << "Wynik z odejmowania = " << odejmowanie << endl << endl; wynik = odejmowanie; break; } case 3: { int mnozenie = mn_1( wynik ); cout << "Wynik z mnozenia = " << mnozenie << endl << endl; wynik = mnozenie; break; } case 4: { int dzielenie = dz_1( wynik ); cout << "Wynik z dzielenia = " << dzielenie << endl << endl; wynik = dzielenie; break; } case 5: wynik = 0; break; default: cout << "Sprobuj jeszcze raz" << endl << endl; wynik = 0; break; } } while( 1 ); return( 0 ); }
|
|
SeaMonster131 |
» 2012-02-22 11:13:17 Czemu służy to cin.fail(); w funkcjach? |
|
Asharoth Temat założony przez niniejszego użytkownika |
» 2012-02-22 11:46:46 Ma służyć jako zabezpieczenie przed wprowadzaniem błędnych danych. |
|
SeaMonster131 |
» 2012-02-22 12:57:25 O to mi chodzi: cin.fail(); cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; cin.fail();
a nie o warunek w pętli. |
|
Asharoth Temat założony przez niniejszego użytkownika |
» 2012-02-22 13:33:32 Myślałem że trzeba po każdej nowej zmiennej sprawdzać poprawność danych. |
|
pekfos |
» 2012-02-22 15:31:43 istream::fail sprawdza czy nie było błędu i zwraca wartość. Ty w tych suchych wywołaniach nic nie robisz z tą wartością. Po co tak sprawdzać poprawność skoro nic sie nie stanie po wpisaniu niepoprawnych danych? |
|
Asharoth Temat założony przez niniejszego użytkownika |
» 2012-02-23 10:07:07 Aha myślałem że trzeba wywołać cin.fail() w funkcji żeby potem sprawdzić w pętli while czy cin.fail() == true |
|
Asharoth Temat założony przez niniejszego użytkownika |
» 2012-02-23 10:24:25 // przepraszam za duble post zapomniałem że to ja napisałem poprzedni post... obiecuje że to się więcej nie powtórzy. Ok program poprawiony i raczej działa ale mam pytanie jak można zmniejszyć objętość ? #include <iostream> #include <conio.h> #include <cstdlib> using namespace std;
int dd_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Dodawanie " << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; } while( cin.fail() == true ); return wynik + a; } else do { cin.clear(); cin.sync(); cout << "Dodawanie " << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; } while( cin.fail() == true ); return a + b; } int od_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Odejmowanie " << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; } while( cin.fail() == true ); return wynik - a; } else do { cin.clear(); cin.sync(); cout << "Odejmowanie " << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; } while( cin.fail() == true ); return a - b; } int mn_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Mnozenie" << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; } while( cin.fail() == true ); return wynik * a; } else do { cin.clear(); cin.sync(); cout << "Mnozenie" << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; } while( cin.fail() == true ); return a * b; } int dz_1( int wynik ) { int b; int a; if( wynik != 0 ) { do { cin.clear(); cin.sync(); cout << "Dzielenie" << endl << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> a; cout << endl; } while( cin.fail() == true ); return wynik / a; } else do { cin.clear(); cin.sync(); cout << "Dzielenie" << endl << endl; cout << "Podaj liczbe a : " << endl << endl; cin >> a; cout << endl; cout << "Podaj liczbe b : " << endl << endl; cin >> b; cout << endl; } while( cin.fail() == true ); return a / b; } int wynik = 0; int wyb; int main()
{ cout << "\t===Kalkulator===" << endl << endl; do { getch(); system( "cls" ); cout << "\t[0] Koniec Programu" << endl; cout << "\t[1] Dodawanie" << endl; cout << "\t[2] Odejmowanie" << endl; cout << "\t[3] Mnozenie" << endl; cout << "\t[4] Dzielenie" << endl; cout << "\t[5] Od Nowa" << endl << endl; if( wynik != 0 ) cout << "Wynik z poprzedniego obliczenia : " << wynik << endl; do { cin.clear(); cin.sync(); cin >> wyb; } while( cin.fail() == true ); switch( wyb ) { case 0: cout << "Koniec!"; return( 0 ); break; case 1: { int dodawanie = dd_1( wynik ); cout << "Wynik z dodawania = " << dodawanie << endl << endl; wynik = dodawanie; break; } case 2: { int odejmowanie = od_1( wynik ); cout << "Wynik z odejmowania = " << odejmowanie << endl << endl; wynik = odejmowanie; break; } case 3: { int mnozenie = mn_1( wynik ); cout << "Wynik z mnozenia = " << mnozenie << endl << endl; wynik = mnozenie; break; } case 4: { int dzielenie = dz_1( wynik ); cout << "Wynik z dzielenia = " << dzielenie << endl << endl; wynik = dzielenie; break; } case 5: wynik = 0; break; default: cout << "Sprobuj jeszcze raz" << endl << endl; wynik = 0; break; } } while( 1 ); return( 0 ); }
|
|
« 1 » 2 |