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

cin.clear i cin.sync

Ostatnio zmodyfikowano 2013-05-23 00:02
Autor Wiadomość
usmiech
Temat założony przez niniejszego użytkownika
cin.clear i cin.sync
» 2013-05-11 00:18:11
Az do tej pory nie do konca widzialem potrzebe czyszczenia strumienia. Pewnie sie to wyda dziwne, ale tak mialem. Ale do tego wieczora, teraz zmienilem zdanie. Jak to sie stalo ? Otoz chcialem uniemozliwic w prosty sposob wysypywanie sie programu kalkulator napisanego chyba  przez Monster /jesli cos pomylilem to sorki :)/ jesli uzytkownik wpisze cos innego niz liczbe rzeczywista...I ciezko by to bylo zrobic bez czyszczenia strumienia..zreszta sami porownajcie co sie dzieje.. Zamieszcze dwa kody , pierwszy bez czyszczenia, drugi z cin .. :)

C/C++
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
double get_number();

int main()
{
    double liczba1 = 0;
    double liczba2 = 1;
    char wybor = ' ';
    char d = ' ';
    cout << "Witaj w zabawie kalkulator\n"
    "Jesli wprowadzisz jakikolwiek znak nie bedacy liczba rzeczywista\n"
    "Program przypisze jej wartosc 0... :)\n\n";
    do
    {
       
        cout << "Wprowadz pierwsza liczbe: ";
        liczba1 = get_number();
        cout << "\n";
        cout << "Wybierz opcje dzialania :\n\n"
        "Dodawanie (+)\n"
        "Odejmowanie (-)\n"
        "Mnozenie (*)\n"
        "Dzielenie (/) :\n";
        cin >> wybor;
       
        cout << "Wprowadz druga liczbe  : ";
        liczba2 = get_number();
        cout << "\n\n";
       
        switch( wybor )
        {
        case '+': cout << liczba1 << " + " << liczba2 << " == " << liczba1 + liczba2 << endl;
            break;
        case '-': cout << liczba1 << " - " << liczba2 << " == " << liczba1 - liczba2 << endl;
            break;
        case '*': cout << liczba1 << " * " << liczba2 << " == " << liczba1 * liczba2 << endl;
            break;
        case '/':
            if( liczba2 == 0 )
            {
                cout << "Niedozwolone dzielenie!!!!\n";
                break;;
            }
            else
            {
                cout << liczba1 << " / " << liczba2 << " == " << liczba1 / liczba2 << endl;
            }
            break;
            default: cout << "Sorry, ale nie rozpoznalem znaku !!!\n";
            break;
        }
        cout << "Czy chcesz nadal wykonywac obliczenia ? \n"
        "Jesli tak to 'y'\n"
        "Jesli nie to 'n':\n";
        cin >> d;
       
    } while( d != 'n' );
   
   
    system( "PAUSE" );
    return 0;
}

double get_number() {
    char s[ 100 ];
    cin.getline( s, 100 );
    if( strlen( s ) == 0 )
         return 0.0;
   
    if( cin.fail() )
         return 0.0;
   
    return atof( s );
}

//a teraz ten z czyszczeniem

C/C++
#include "stdafx.h"
#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdlib>
using namespace std;
double get_number();

int main()
{
    double liczba1 = 0;
    double liczba2 = 1;
    char wybor = ' ';
    char d = ' ';
    cout << "Witaj w zabawie kalkulator\n"
    "Jesli wprowadzisz jakikolwiek znak nie bedacy liczba rzeczywista\n"
    "Program przypisze jej wartosc 0... :)\n\n";
    do
    {
        cin.clear();
        cin.sync();
        cout << "Wprowadz pierwsza liczbe: ";
        liczba1 = get_number();
        cout << "\n";
        cout << "Wybierz opcje dzialania :\n\n"
        "Dodawanie (+)\n"
        "Odejmowanie (-)\n"
        "Mnozenie (*)\n"
        "Dzielenie (/) :\n";
        cin >> wybor;
        cin.clear();
        cin.sync();
        cout << "Wprowadz druga liczbe  : ";
        liczba2 = get_number();
        cout << "\n\n";
       
        switch( wybor )
        {
        case '+': cout << liczba1 << " + " << liczba2 << " == " << liczba1 + liczba2 << endl;
            break;
        case '-': cout << liczba1 << " - " << liczba2 << " == " << liczba1 - liczba2 << endl;
            break;
        case '*': cout << liczba1 << " * " << liczba2 << " == " << liczba1 * liczba2 << endl;
            break;
        case '/':
            if( liczba2 == 0 )
            {
                cout << "Niedozwolone dzielenie!!!!\n";
                break;;
            }
            else
            {
                cout << liczba1 << " / " << liczba2 << " == " << liczba1 / liczba2 << endl;
            }
            break;
            default: cout << "Sorry, ale nie rozpoznalem znaku !!!\n";
            break;
        }
        cout << "Czy chcesz nadal wykonywac obliczenia ? \n"
        "Jesli tak to 'y'\n"
        "Jesli nie to 'n':\n";
        cin >> d;
       
    } while( d != 'n' );
   
   
    system( "PAUSE" );
    return 0;
}

double get_number() {
    char s[ 100 ];
    cin.getline( s, 100 );
    if( strlen( s ) == 0 )
         return 0.0;
   
    if( cin.fail() )
         return 0.0;
   
    return atof( s );
}
// ciekawe co ? :)
// nie patrzcie na grafike czy funkcjonalnosc kalkulatora , bo to nie to bylo moim celem :)
P-82623
usmiech
Temat założony przez niniejszego użytkownika
» 2013-05-11 01:05:50
<< removed >>
P-82624
DejaVu
» 2013-05-23 00:02:11
Jako, że wątek nie zawiera pytania, a samą informację to go zamykam ;)
P-83650
« 1 »
  Strona 1 z 1