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

[Lekcja 17] zad 2

Ostatnio zmodyfikowano 2012-02-23 12:35
Autor Wiadomość
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
C/C++
default:
cout << "Sprobuj jeszcze raz" << endl << endl;
wynik = 0;
break;
Wie ktoś o co mu chodzi ?

C/C++
#include <iostream>
#include <conio.h>
#include <cstdlib>
using namespace std;

int dd_1( int wynik )
{
    int b;
    int a;
    if( wynik != 0 )
    {
        do
        { //do + b
            cin.clear();
            cin.sync();
            cout << "Dodawanie " << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
            cin.fail();
        } while( cin.fail() == true ); // dp + b
       
        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
        { //do - b
            cin.clear();
            cin.sync();
            cout << "Odejmowanie " << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
            cin.fail();
        } while( cin.fail() == true ); // do - b
       
        return wynik - a;
    }
    else
    do
    { // do - ab
        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 ); //do - ab
   
    return a - b;
}
int mn_1( int wynik )
{
    int b;
    int a;
    if( wynik != 0 )
    {
        do
        { //do * b
            cin.clear();
            cin.sync();
            cout << "Mnozenie" << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
            cin.fail();
        } while( cin.fail() == true ); // do * b
       
        return wynik * a;
    }
    else
    do
    { // do * ab
        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 ); //do * ab
   
    return a * b;
}
int dz_1( int wynik )
{
    int b;
    int a;
    if( wynik != 0 )
    {
        do
        { //do / b
            cin.clear();
            cin.sync();
            cout << "Dzielenie" << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
            cin.fail();
        } while( cin.fail() == true ); // do / b
       
        return wynik / a;
    }
    else
    do
    { // do / ab
        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 ); //do / ab
   
    return a / b;
}
int wynik = 0;
int wyb;
int main()

{ //main
    cout << "\t===Kalkulator===" << endl << endl;
    do
    { //do 1
        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 ); //do 1
   
    return( 0 );
} //main
P-51193
SeaMonster131
» 2012-02-22 11:13:17
Czemu służy to
cin.fail();
 w funkcjach?
P-51195
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.
P-51197
SeaMonster131
» 2012-02-22 12:57:25
O to mi chodzi:
C/C++
cin.fail();
cout << "Podaj liczbe b : " << endl << endl;
cin >> b;
cout << endl;
cin.fail();
a nie o warunek w pętli.
P-51210
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.
P-51218
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
C/C++
//..
cin.fail();
//..
nic nie robisz z tą wartością. Po co tak sprawdzać poprawność skoro nic sie nie stanie po wpisaniu niepoprawnych danych?
P-51223
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
P-51254
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ść ?
C/C++
#include <iostream>
#include <conio.h>
#include <cstdlib>
using namespace std;

int dd_1( int wynik )
{
    int b;
    int a;
    if( wynik != 0 )
    {
        do
        { //do + b
            cin.clear();
            cin.sync();
            cout << "Dodawanie " << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
        } while( cin.fail() == true ); // dp + b
       
        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
        { //do - b
            cin.clear();
            cin.sync();
            cout << "Odejmowanie " << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
        } while( cin.fail() == true ); // do - b
       
        return wynik - a;
    }
    else
    do
    { // do - ab
        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 ); //do - ab
   
    return a - b;
}
int mn_1( int wynik )
{
    int b;
    int a;
    if( wynik != 0 )
    {
        do
        { //do * b
            cin.clear();
            cin.sync();
            cout << "Mnozenie" << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
        } while( cin.fail() == true ); // do * b
       
        return wynik * a;
    }
    else
    do
    { // do * ab
        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 ); //do * ab
   
    return a * b;
}
int dz_1( int wynik )
{
    int b;
    int a;
    if( wynik != 0 )
    {
        do
        { //do / b
            cin.clear();
            cin.sync();
            cout << "Dzielenie" << endl << endl;
            cout << "Podaj liczbe b : " << endl << endl;
            cin >> a;
            cout << endl;
        } while( cin.fail() == true ); // do / b
       
        return wynik / a;
    }
    else
    do
    { // do / ab
        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 ); //do / ab
   
    return a / b;
}
int wynik = 0;
int wyb;
int main()

{ //main
    cout << "\t===Kalkulator===" << endl << endl;
    do
    { //do 1
        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 ); //do 1
   
    return( 0 );
} //main
P-51255
« 1 » 2
  Strona 1 z 2 Następna strona