AmbitnyIdiota Temat założony przez niniejszego użytkownika |
lekcja 27 zadanie 1 problem z zabezpieczeniem przed wpisywaniem. » 2017-09-27 20:15:22 Zadbaj o bezpieczeństwo wprowadzonych danych, tj. w przypadku błędnego wieku (np. wprowadzonego tekstu) program ma ponawiać żądanie aż do skutku. Zadbałem o to ale chciałbym jeszcze zabezpieczyć program przed wpisywaniem cyfr tam gdzie ma byc tekst i na odwrót, prosze o wytlumaczenie, wiem ze moge skorzystać z obsługi strumienia wejściowego cin.clear() cin.sync(), ale nie jestem do konca pewny jak to zrobić, może ktoś w jakiś sposób podpowiedzieć? Byłbym wdzięczny. #include <iostream>
using namespace std;
void wczytajOsobe( string & imie, string & nazwisko, int & wiek ) { cout << " podaj swoje imie; " << endl; cin >> imie; cout << "podaj swoj nazwisko: " << endl; cin >> nazwisko; cout << " podaj swoj wiek: " << endl; do { cin >> wiek; } while( wiek <= 0 ); } void wypiszOsobe( string imie, string nazwisko, int wiek ) { cout << "twoje imie to: " << imie << endl; cout << "twoje nazwisko to: " << nazwisko << endl; cout << "twoj wiek to: " << wiek << endl; }
int main() { string imie[ 2 ]; string nazwisko[ 2 ]; int wiek[ 2 ]; for( int i = 0; i < 2; i++ ) wczytajOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); for( int i = 0; i < 2; i++ ) wypiszOsobe( imie[ i ], nazwisko[ i ], wiek[ i ] ); return 0; }
|
|
Kinexity |
» 2017-09-27 20:22:57 Nie używaj cin.sync(); - ta metoda nie służy do czyszczenia strumienia. Zamiast tego korzystaj z cin.ignore( numeric_limits < streamsize >::max(), '\n' ); . A jeżeli chodzi o sprawdzanie, czy nie podano liczby zamiast tekstu, to musisz albo sprawdzać, czy string da się przekonwertować na liczbę, albo musisz sprawdzać znaki po kolei. |
|
YooSy |
» 2017-09-27 20:30:29 Do sprawdzwnia czy string zawiera liczby wygodna będzie metoda find_first_of ze <string>Dodaj sprawdzanie czy udało się pobrać wartość liczbową do { if( !( cin >> wiek ) ) { cin.clear(); cin.ignore( numeric_limits < streamsize >::max(), '\n' ); wiek = - 1; } } while( wiek <= 0 ); |
|
AmbitnyIdiota Temat założony przez niniejszego użytkownika |
» 2017-10-04 13:15:56 działa super co do sprawdzenia czy to liczba ale kompletnie nie rozumiem tego cin.ignore( numeric_limits < streamsize >::max(), '\n' ); wiek = - 1; wiem że cin.ignore( numeric_limits < streamsize >::max() , ma ignorować każdy napis dopóki nie skończy się linia czyli '\n' . Tyle wystarczy żebym zapamiętał czy wypadałoby wiedzieć co to streamsize :D ? |
|
Kinexity |
» 2017-10-04 15:07:20 |
|
AmbitnyIdiota Temat założony przez niniejszego użytkownika |
» 2017-10-04 20:40:53 no wlasnie to mi nie mówi za dużo :/ |
|
Kinexity |
» 2017-10-04 21:14:02 Pierwsze zdanie mówi ci wszystko czego ci w życiu potrzeba. Żadnej innej wiedzy tajemnej nie ma. |
|
AmbitnyIdiota Temat założony przez niniejszego użytkownika |
» 2017-10-05 13:07:02 no dobra integralny typ używany do reprezentowania liczby znaków przeniesionych do strumienia wyjścia/wejścia ?? czyli po prostu odpowiada za liczbe znaków w i/o? :D |
|
« 1 » 2 |