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? #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; }
|
|
carlosmay |
» 2016-10-08 14:17:21 |
|
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. |
|
kistel66 |
» 2016-10-15 17:57:54 #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; }
|
|
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? |
|
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. |
|
carlosmay |
» 2016-10-15 22:58:45 while( !( cin >> l ) ) { cout << endl << "Blad, podaj poprawna liczbe: "; cin.clear(); cin.sync(); } |
| | v 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 . |
|
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... #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; }
|
|
« 1 » 2 |