[Lekcja 17] Praca domowa
Ostatnio zmodyfikowano 2012-07-26 19:33
Nedveed Temat założony przez niniejszego użytkownika |
[Lekcja 17] Praca domowa » 2012-07-26 17:09:32 Otóż mam problem z punktem drugim. Wszystko działa dobrze, przebiega sprawnie, lapie błędy itp, ale ... Po przerobieniu kalkulatora z wcześniejszej lekcji mnoży jakiekolwiek wartości przez 1024 -.^
Experymentowałem - sprawdzałem funkcję poza pętlą i funkcja działała poprawnie, wewnatrz mnoży. Kompletnie nie rozumiem.
#include <iostream> using namespace std;
int wczytajLiczbe_a() { int a; bool stan_a; do { cout << "a = "; cin >> a; stan_a = cin.good(); cin.clear(); cin.sync(); if( stan_a == false ) cout << "Podales niewlasciwa wartosc. Sprobuj jeszcze raz:" << '\n'; } while( stan_a == false ); return a; }
int wczytajLiczbe_b() { int b; bool stan_b; do { cout << "b = "; cin >> b; stan_b = cin.good(); cin.clear(); cin.sync(); if( stan_b == false ) cout << "Podales niewlasciwa wartosc. Sprobuj jeszcze raz:" << '\n'; } while( stan_b == false ); return b; }
int main() { int wynik = 0, a, b; char dzialanie; do { cout << '\t' << "Aktualny wynik: " << wynik << '\n' << '\n'; cout << "Wprowadz liczby(rozne od 0): " << '\n'; cin.clear(); cin.sync(); a = wczytajLiczbe_a() << '\n'; cin.clear(); cin.sync(); b = wczytajLiczbe_b() << '\n'; if( a != 0 && b != 0 ) { cout << '\n' << "[1] Dodawanie"; cout << '\n' << "[2] Odejmowanie"; cout << '\n' << "[3] Mnozenie"; cout << '\n' << "[4] Dzielenie"; cout << '\n' << "[5] Rezygnuj"; cout << '\n' << '\t' << "Wybierz dzialanie: "; cin.clear(); cin.sync(); cin >> dzialanie; if( dzialanie != 0 ) switch( dzialanie ) { case '1': wynik = a + b; break; case '2': wynik = a - b; break; case '3': wynik = a * b; break; case '4': wynik = a / b; break; case '5': cout << "Zrezygnowales z obliczenia, wiec nie zostalo wykonane" << '\n' << '\n'; break; default: cout << "Wybor dzialania jest nieprawidlowy" << '\n'; dzialanie = 0; } } else cout << "Podane liczby sa nieprawidlowe." << '\n'; } while( a != 0 && b != 0 && dzialanie != 0 ); cout << '\n' << "===================" << '\n'; cout << "Koniec :)" << '\n'; return 0; }
Oryginalny kalkulator z wcześniejszej pracy domowej:
#include <iostream> using namespace std;
int main() { int a, b; int wynik = 0; char dzialanie; bool stan_a, stan_b; do { cout << '\t' << "Aktualny wynik: " << wynik << '\n' << '\n'; cout << "WprowadŸ liczby(rozne od 0): "; cout << '\n' << "a = "; cin.clear(); cin.sync(); cin >> a; stan_a = cin.good(); cout << "b = "; cin.clear(); cin.sync(); cin >> b; stan_b = cin.good(); if( a != 0 && b != 0 && stan_a && stan_b ) { cout << '\n' << "[1] Dodawanie"; cout << '\n' << "[2] Odejmowanie"; cout << '\n' << "[3] Mnozenie"; cout << '\n' << "[4] Dzielenie"; cout << '\n' << "[5] Rezygnuj"; cout << '\n' << '\t' << "Wybierz dzialanie: "; cin.clear(); cin.sync(); cin >> dzialanie; if( dzialanie != 0 ) switch( dzialanie ) { case '1': wynik = a + b; break; case '2': wynik = a - b; break; case '3': wynik = a * b; break; case '4': wynik = a / b; break; case '5': cout << "Zrezygnowales z obliczenia, wiec nie zostalo wykonane" << '\n' << '\n'; break; default: cout << "Wybor dzialania jest nieprawidlowy" << '\n'; dzialanie = 0; } } else cout << "Podane liczby sa nieprawidlowe." << '\n'; } while( a != 0 && b != 0 && stan_a && stan_b && dzialanie != 0 ); cout << '\n' << "===================" << '\n'; cout << "Koniec :)" << '\n'; return 0; }
|
|
CodeMeister |
» 2012-07-26 17:25:11 a = wczytajLiczbe_a() << '\n'; cin.clear(); cin.sync(); b = wczytajLiczbe_b() << '\n';
po co to "<< '\n' - usuń to i bedzie działało :) ps. uzywaj znaczników cpp i /cpp to wstawiania kodu |
|
Nedveed Temat założony przez niniejszego użytkownika |
» 2012-07-26 17:30:11 O, rzeczywiście działa! Dzięki Tylko jeszcze pytanie co do tego błędu. Dlaczego ma to aż taki wpływ na to? To tylko znak kolejnej linii ... <moglo by w takim wypadku unikac, wygodniej haha... mysli sobie> |
|
CodeMeister |
» 2012-07-26 17:32:08 tak sie tego nie robi. musisz wtedy dopisać cout << "...'\n,";
ale najlepiej jest pisać cout << "..." << endl; |
|
Nedveed Temat założony przez niniejszego użytkownika |
» 2012-07-26 17:37:44 heh. Właśnie wiem, że się tak nie robi, ale wcześniej byl inny problem i po przerobieniu przeoczyłem to. Ogółem zaskoczył mnie ten błąd. Ale już rozumiem.
ps Dlaczego lepiej używać endl? |
|
CodeMeister |
» 2012-07-26 17:38:50 czytelniejszy... |
|
SeaMonster131 |
» 2012-07-26 17:40:50 Pisz jak Ci wygodnie, różnicy między endl a \n zbytnio nie ma. |
|
CodeMeister |
» 2012-07-26 19:16:39 ej... prawie udało mi się go przeciągnąć na ciemną stronę mocy... :D |
|
« 1 » 2 |