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

Zabezpieczenie przed wprowadzeniem niepoprawnych danych

Ostatnio zmodyfikowano 2012-11-28 01:20
Autor Wiadomość
kynol
Temat założony przez niniejszego użytkownika
Zabezpieczenie przed wprowadzeniem niepoprawnych danych
» 2012-11-27 15:45:59
Witam. Mam problem mianowicie zabezpieczenie liczby przed wprowadzeniem zlych wartosci zrobilem lecz nie calkiem.. Mianowicie jesli podam jakikolwiek znak, litere to program i tak przechodzi dalej i wypisuje bzdury. Ma ktos pomysl jak temu zaradzic ? Podaje kod
C/C++
#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
    int wybor, a;
    bool zabezpieczenie_liczby, zabezpieczenie;
    cout << "\tWybierz dzialanie: " << endl;
    cout << "1 - Post-inkrementacja\n2 - Pre-inkrementacja\n3 - Post-dekrementacja\n4 - Pre-dekrementacja" << endl;
    do
    {
        cout << "Musisz podac tylko liczbe z zakresu od 1 - 4!" << endl;
        cout << "Wybierasz dzialanie nr: ";
        cin.clear();
        cin.sync();
        cin >> wybor;
        zabezpieczenie = cin.good();
        if( zabezpieczenie == true );
        else
             cout << "Program nie akceptuje znakow badz liter!" << endl;
       
    } while(( wybor <= 0 ) ||( wybor >= 5 ) );
   
    switch( wybor )
    {
    case 1:
        {
            cout << "Wybrales Post-inkrementacje" << endl;
            do
            {
                cout << "Podaj liczbe= ";
                cin.clear();
                cin.sync();
                cin >> a;
                zabezpieczenie_liczby = cin.good();
                if( zabezpieczenie_liczby == true );
                else
                     cout << "Program nie akceptuje znakow badz liter!" << endl;
               
            } while( a < 0 );
           
            cout << "Wynik post-inkrementacji to: " << a++ << endl;
            cout << "Liczba po przejsciu post-inkrementacji: " << a << endl;
        }
        break;
    case 2:
        {
            cout << "Wybrales Pre-inkrementacje" << endl;
            do
            {
                cout << "Podaj liczbe= ";
                cin.clear();
                cin.sync();
                cin >> a;
                zabezpieczenie_liczby = cin.good();
                if( zabezpieczenie_liczby == true );
                else
                     cout << "Program nie akceptuje znakow badz liter!" << endl;
               
            } while( a < 0 );
           
            cout << "Wynik pre-inkrementacji to: " << ++a << endl;
        }
        break;
    case 3:
        {
            cout << "Wybrales Post-dekrementacje" << endl;
            do
            {
                cout << "Podaj liczbe= ";
                cin.clear();
                cin.sync();
                cin >> a;
                zabezpieczenie_liczby = cin.good();
                if( zabezpieczenie_liczby == true );
                else
                     cout << "Program nie akceptuje znakow badz liter!" << endl;
               
            } while( a < 0 );
           
            cout << "Wynik post-dekrementacji to: " << a-- << endl;
            cout << "Liczba po przejsciu post-dekrementacji: " << a << endl;
        }
        break;
    case 4:
        {
            cout << "Wybrales Pro-dekrementacje" << endl;
            do
            {
                cout << "Podaj liczbe= ";
                cin.clear();
                cin.sync();
                cin >> a;
                zabezpieczenie_liczby = cin.good();
                if( zabezpieczenie_liczby == true );
                else
                     cout << "Program nie akceptuje znakow badz liter!" << endl;
               
            } while( a < 0 );
           
            cout << "Wynik pro-dekrementacji to: " << --a << endl;
        }
        break;
    }
    system( "PAUSE" );
    return 0;
}
P-69977
f0g
» 2012-11-27 16:19:12
C/C++
cin.clear();
cin.sync();

Nie jestem w 100% pewien, ale to powinno być po
std::cin
.
P-69980
SeaMonster131
» 2012-11-27 16:26:37
Mianowicie jesli podam jakikolwiek znak, litere to program i tak przechodzi dalej i wypisuje bzdury
A gdzie masz warunek, żeby powtarzał dany fragment kodu, kiedy wczytywanie zmiennej nie powiedzie się? Jak napiszesz, tak będzie program działać :)
P-69981
kynol
Temat założony przez niniejszego użytkownika
» 2012-11-28 01:20:44
Problem rozwiazany daje kod
C/C++
#include <cstdlib>
#include <iostream>
using namespace std;

int main()
{
    int wybor, a;
    bool zabezpieczenie_liczby, zabezpieczenie;
    cout << "Program demonstrujacy:" << endl;
    cout << "Post-inkrementacje, Pre-dekrementacje, Post-dekrementacje, Pre-inkrementacje" << endl;
    cout << "\n\n\n";
    cout << "\tWybierz dzialanie: " << endl;
    cout << "1. Post-inkrementacja\n2. Pre-inkrementacja\n3. Post-dekrementacja\n4. Pre-dekrementacja" << endl;
    do
    {
        cout << "Musisz podac tylko liczbe z zakresu od 1 - 4!" << endl;
        cout << "Wybierasz dzialanie nr: ";
        cin.clear();
        cin.sync();
        cin >> wybor;
        zabezpieczenie = cin.good();
        if( zabezpieczenie == true );
        else
             cout << "Program nie akceptuje znakow badz liter!" << endl;
       
    } while(( wybor <= 0 ) ||( wybor >= 5 ) );
   
    switch( wybor )
    {
    case 1:
        {
            cout << "Wybrales Post-inkrementacje" << endl;
            cout << "Podaj liczbe= ";
            cin >> a;
            zabezpieczenie_liczby = cin.good();
            if( !zabezpieczenie_liczby )
            {
                do
                {
                    cout << "Program nie akceptuje znakow badz liter!" << endl;
                    cout << "Podaj jeszcze raz liczbe= ";
                    cin.clear();
                    cin.sync();
                    cin >> a;
                    zabezpieczenie_liczby = cin.good();
                } while( !zabezpieczenie_liczby );
               
            }
            cout << "\tPodana liczba to: " << a++ << endl;
            cout << "\tLiczba po przejsciu post-inkrementacji: " << a << endl;
        }
        break;
    case 2:
        {
            cout << "Wybrales Pre-inkrementacje" << endl;
            cout << "Podaj liczbe= ";
            cin >> a;
            zabezpieczenie_liczby = cin.good();
            if( !zabezpieczenie_liczby )
            {
                do
                {
                    cout << "Program nie akceptuje znakow badz liter!" << endl;
                    cout << "Podaj jeszcze raz liczbe= ";
                    cin.clear();
                    cin.sync();
                    cin >> a;
                    zabezpieczenie_liczby = cin.good();
                } while( !zabezpieczenie_liczby );
               
            }
            cout << "\tLiczba po przejsciu pre-inkrementacji to: " << ++a << endl;
        }
        break;
    case 3:
        {
            cout << "Wybrales Post-dekrementacje" << endl;
            cout << "Podaj liczbe= ";
            cin >> a;
            zabezpieczenie_liczby = cin.good();
            if( !zabezpieczenie_liczby )
            {
                do
                {
                    cout << "Program nie akceptuje znakow badz liter!" << endl;
                    cout << "Podaj jeszcze raz liczbe= ";
                    cin.clear();
                    cin.sync();
                    cin >> a;
                    zabezpieczenie_liczby = cin.good();
                } while( !zabezpieczenie_liczby );
               
            }
            cout << "\tPodana liczba to: " << a-- << endl;
            cout << "\tLiczba po przejsciu post-dekrementacji: " << a << endl;
        }
        break;
    case 4:
        {
            cout << "Wybrales Pro-dekrementacje" << endl;
            cout << "Podaj liczbe= ";
            cin >> a;
            zabezpieczenie_liczby = cin.good();
            if( !zabezpieczenie_liczby )
            {
                do
                {
                    cout << "Program nie akceptuje znakow badz liter!" << endl;
                    cout << "Podaj jeszcze raz liczbe= ";
                    cin.clear();
                    cin.sync();
                    cin >> a;
                    zabezpieczenie_liczby = cin.good();
                } while( !zabezpieczenie_liczby );
               
            }
            cout << "\tLiczba po przejsciu pro-dekrementacji to: " << --a << endl;
        }
        break;
    }
    system( "PAUSE" );
    return 0;
}
P-70033
« 1 »
  Strona 1 z 1