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

Lekcja 15 kalkulator

Ostatnio zmodyfikowano 2012-05-27 16:05
Autor Wiadomość
Luke_Skywalker
Temat założony przez niniejszego użytkownika
Lekcja 15 kalkulator
» 2012-05-27 14:03:11
Witam serdecznie i przedstawiam kolejny post z serii [Lekcja 15 - kalkulator] ;) Głównie chciałbym się pochwalić zrobionym przez siebie kalkulatorkiem i poprosić o opinię ludzi nieco bardziej obeznanych.

C/C++
#include <iostream>
using namespace std;

int main()

{
    int wybor;
    float a, wynik = 0;
    do
    {
        cout << "=====Kalkulator=====" << endl;
        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cout << "[5] Rezygnuj" << endl;
        cout << "Aktualny wynik: " << wynik << endl;
        cout << "Podaj liczbe: ";
        cin >> a;
       
        if( cin.good() == false )
       
        do
        {
            cin.clear();
            cin.sync();
            cout << "Podaj liczbe:";
            cin >> a;
        }
        while( cin.good() == false );
       
        cin.clear();
        cin.sync();
       
        if( a == 0 )
        {
            system( "pause" );
            return 0;
        }
       
        do
        {
            cout << "Wybierz dzialanie: ";
            cin >> wybor;
            cin.clear();
            cin.sync();
        }
        while( wybor != 1 && wybor != 2 && wybor != 3 && wybor != 4 && wybor != 5 );
       
        switch( wybor )
        {
        case 1:
            wynik += a;
            break;
        case 2:
            wynik -= a;
            break;
        case 3:
            wynik *= a;
            break;
        case 4:
            wynik /= a;
            break;
        case 5:
            system( "pause" );
            return 0;
        }
        system( "cls" );
    }
    while( 1 == 1 ); // cóż, lepszego pomysłu nie było ;)
   
   
}
P-57359
xevuel
» 2012-05-27 14:13:38
while( 1 == 1 );
O słowie kluczowym
true
 nie słyszałeś?
P-57361
Luke_Skywalker
Temat założony przez niniejszego użytkownika
» 2012-05-27 14:21:25
W zasadzie do tej pory nie, bo mimo wszystko dopiero uczę się podstaw, ale stwierdziłem, że skoro wystarczy, że warunek tej pętli zawsze będzie spełniony to mogę stworzyć tam coś. Zabawiłem się w harcerza i byłem ciekaw czy tak to działa. To tyle :)

Chyba udało mi się wyłapać własny błąd. Otóż brakuje nawiasów klamrowych przy instrukcji:

C/C++
if( cin.good() == false )
{ // brakujące nawiasy
    do
    {
        cin.clear();
        cin.sync();
        cout << "Podaj liczbe:";
        cin >> a;
    }
    while( cin.good() == false );
   
} // brakujące nawiasy

Bez tego sprawdzanie poprawności wybranej operacji zawodzi. Cóż, czasem warto 'wgryźć się' ponownie ;)
Jeśli ktoś znajdzie jakiekolwiek inne niedopatrzenia, będę bardzo wdzięczny za informacje.

... poprawka, nadal nie działa ^^"
P-57362
Luke_Skywalker
Temat założony przez niniejszego użytkownika
» 2012-05-27 16:05:17
Dobra, nadal nie umiem znaleźć błędu, który sprawia, że przy drugim przebiegu całej wielkiej pętli w której zawarty jest program, sprawdzanie poprawności wyboru nie działa, a w przypadku wybrania błędnej operacji program wykonuje operację wybraną przy poprzednim przebiegu. Jeśli ktoś zrozumiał o co mi chodzi to prosiłbym o pomoc ;)

C/C++
#include <iostream>
using namespace std;

int main()

{
    int wybor;
    float a, wynik = 0;
    do
    {
        cout << "=====Kalkulator=====" << endl;
        cout << "[1] Dodawanie" << endl;
        cout << "[2] Odejmowanie" << endl;
        cout << "[3] Mnozenie" << endl;
        cout << "[4] Dzielenie" << endl;
        cout << "[5] Rezygnuj" << endl;
        cout << "Aktualny wynik: " << wynik << endl;
        cout << "Podaj liczbe: ";
        cin >> a;
       
       
        if( cin.good() == false ) //sprawdzanie czy wprowadzono liczbę czy jakieś pierdoły
        {
            do
            {
                cin.clear();
                cin.sync();
                cout << "Podaj liczbe:";
                cin >> a;
            }
            while( cin.good() == false );
           
        }
       
        cin.clear();
        cin.sync();
       
        if( a == 0 ) // sprawdzanie czy nie wpisano zera, jeśli tak to dobranoc
        {
            system( "pause" );
            return 0;
        }
       
        do // to jest pętla, która przy drugim przebiegu całości przestaje działać
        {
            cout << "Wybierz dzialanie: ";
            cin >> wybor;
            cin.clear();
            cin.sync();
        }
        while( wybor != 1 && wybor != 2 && wybor != 3 && wybor != 4 && wybor != 5 );
       
       
        switch( wybor )
        {
        case 1:
            wynik += a;
            break;
        case 2:
            wynik -= a;
            break;
        case 3:
            wynik *= a;
            break;
        case 4:
            wynik /= a;
            break;
        case 5:
            system( "pause" );
            return 0;
        }
        system( "cls" );
       
    }
    while( 1 == 1 ); // cóż, lepszego pomysłu nie było ;)
   
   
}

Odkryłem jedynie, że jeśli błędnym wyborem jest liczba lub cyfra to pętla działa poprawnie, lecz jeśli jest to ciąg znaków np 'nie', 'tak', 'bla' to program zaczyna wykonywać ostatnio wybrane dzialanie. Pomaga dopiero przypisanie przypisanie np '0' do zmiennej 'wybór' po wykonaniu zadania z case'a.
P-57366
« 1 »
  Strona 1 z 1