Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[Lekcja 17] Praca domowa

Ostatnio zmodyfikowano 2012-07-26 19:33
Autor Wiadomość
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.

C/C++
#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:

C/C++
#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;
}
P-61175
CodeMeister
» 2012-07-26 17:25:11
C/C++
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
P-61177
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>
P-61178
CodeMeister
» 2012-07-26 17:32:08
tak sie tego nie robi. musisz wtedy dopisać cout << "...'\n,";

ale najlepiej jest pisać cout << "..." << endl;
P-61179
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?
P-61180
CodeMeister
» 2012-07-26 17:38:50
czytelniejszy...
P-61181
SeaMonster131
» 2012-07-26 17:40:50
Pisz jak Ci wygodnie, różnicy między endl a \n zbytnio nie ma.
P-61182
CodeMeister
» 2012-07-26 19:16:39
ej... prawie udało mi się go przeciągnąć na ciemną stronę mocy... :D
P-61195
« 1 » 2
  Strona 1 z 2 Następna strona