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

Lekcja 16 zad. Zabezpieczenie przed wprowadzeniem błędnych wartości liczbowych

Ostatnio zmodyfikowano 2016-10-17 23:02
Autor Wiadomość
IceMan85PL
Temat założony przez niniejszego użytkownika
Lekcja 16 zad. Zabezpieczenie przed wprowadzeniem błędnych wartości liczbowych
» 2016-10-08 12:35:55
Witam. Mam problem z zadaniem domowym, chodzi o gre która losuje liczby. Chciałem zabezpieczyć kod przed możliwością wprowadzenia błędnych wartości liczbowych, tak by po wprowadzeniu złych danych program wyswietlil ze dane sa niepoprawne i cofnal sie ponownie do podania danych. Probowalem dac
if
 do
cin.good(), cin.fail()
 lecz albo program sie nie uruchamial lub sie nie konczyl. Moze mi ktos napisac jak wprowadzic taki zapis do mojego kodu by bylo tak jak wyzej napisalem?
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>


using namespace std;

int main()

{
    srand( time( NULL ) );
    int w =( rand() % 100 ) + 1, l, proba = 0;
   
    do
    {
        proba++;
        cout << "Zgadnji jaka liczba zostala wylosowana od 1 do 100:" << endl;
        cin >> l;
        if( l > w )
        {
            cout << "Wylosowana liczba jest za duza" << endl;
        }
        if( l < w )
        {
            cout << "Wyslosowana liczba jest za mala" << endl;
        }
    } while( l != w );
   
    cout << endl << "Wylosowana liczba to " << w << ". Liczba prob jaka potrzebowlaes do wykonania zadania to " << proba << endl << endl;
   
    return 0;
}
P-152325
carlosmay
» 2016-10-08 14:17:21
P-152327
IceMan85PL
Temat założony przez niniejszego użytkownika
» 2016-10-15 17:50:33
Czytalem i cofalem sie do wczesniejszej lekcji jesli chodzi o zabezpieczenie przed wprowdzeniem niepoprawnych danych lecz ciagle cos jest nie tak. Czy moze ktos napisac taki zapis w tym programie tak by po wprowadzeniu złych danych program wyswietlil ze dane sa niepoprawne i cofnal sie ponownie do proby podania danych. Wtedy sam by sobie wszytsko przeanalizowal,wiec jesli ktos moze byl bym wdzieczny.
P-152562
kistel66
» 2016-10-15 17:57:54
C/C++
#include <iostream>
#include <cstdlib>
#include <ctime>


using namespace std;

int main()

{
    srand( time( NULL ) );
    int w =( rand() % 100 ) + 1, l, proba = 0;
   
    do
    {
        proba++;
        cout << "Zgadnji jaka liczba zostala wylosowana od 1 do 100:" << endl;
        while( !( cin >> l ) )
        {
            cout << endl << "Blad, podaj poprawna liczbe: ";
            cin.clear();
            cin.sync();
        }
       
        if( l > w )
        {
            cout << "Wylosowana liczba jest za duza" << endl;
        }
        if( l < w )
        {
            cout << "Wyslosowana liczba jest za mala" << endl;
        }
    } while( l != w );
   
    cout << endl << "Wylosowana liczba to " << w << ". Liczba prob jaka potrzebowlaes do wykonania zadania to " << proba << endl << endl;
   
    return 0;
}
P-152563
IceMan85PL
Temat założony przez niniejszego użytkownika
» 2016-10-15 18:09:51
Powiedzmy ze zrozumialem, ale do lekcji 16 kursu poznalem tylko petle
do...while
, pętla
while
 będzie sporo pozniej z tego co patrzyłem. Mozna to zapisac jakos inaczej, tak by wykorzystac tylko to co bylo do lekcji 16? 
P-152564
kistel66
» 2016-10-15 18:31:01
Pętla while różni się od do.. while tylko miejscem sprawdzania warunku. Ta pierwsza sprawdza na początku, druga pod koniec.
P-152565
carlosmay
» 2016-10-15 22:58:45
C/C++
while( !( cin >> l ) )
{
    cout << endl << "Blad, podaj poprawna liczbe: ";
    cin.clear();
    cin.sync();
}
  |
  |
  v
C/C++
do {
    if( !( cin >> l ) ) {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        cout << "nieudane wczytywanie - sprobuj ponownie: ";
    }
    else {
        break;
    }
} while( true );

Swoją drogą pojedyncza literka
l
 do złudzenia przypomina
1
.
Już lepiej użyć pełnej nazwy jak
liczba
.
P-152569
Boleslaw
» 2016-10-17 21:59:34
Witam, wszystko niby działa dobrze, tylko po wpisaniu litery zamiast liczby, program będzie w nieskończoność wypisywać błąd i nie mam zielonego pojęcia dlaczego, skoro na mój rozum powinno przejść do linijki "cin >> strzal;" i umożliwic podanie innej wartosci...

 
C/C++
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
    int strzal, liczba, i = 0;
    bool blad;
    srand( time( NULL ) );
    liczba =( rand() % 999 ) + 1;
    cout << "Wylosowano Liczbe z przedzialu <1,1000>, postaraj sie ja odgadnac" << endl;
    do {
        i++;
        cout << "Twoj strzal : " << endl;
        cin >> strzal;
        blad =( cin.good() );
        cin.sync();
        cin.clear();
        if( blad == 0 || strzal > 1000 || strzal < 1 ) {
            cout << "Blad! Wprowadziles niepoprawna wartosc, wybierz LICZBE z przdzialu <1,1000>" << endl;
        } else {
            if( strzal > liczba ) {
                cout << "Ups!Wprowadzona liczba jest za duza" << endl;
            } else if( strzal < liczba ) {
                cout << "Ups!Wprowadzona liczba jest za mala" << endl;
            }
        }
    } while( strzal != liczba );
   
    cout << "Brawo! Udalo Ci sie odgadnac! Wylosowana liczba wynosi : " << liczba << " Liczba prob : " << i << endl;
    return 0;
}
P-152616
« 1 » 2
  Strona 1 z 2 Następna strona