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

lekcja 27 zadanie 1 problem z zabezpieczeniem przed wpisywaniem.

Ostatnio zmodyfikowano 2017-10-05 14:13
Autor Wiadomość
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.

C/C++
#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;
}
P-165283
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.
P-165285
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ą
C/C++
do
{
    if( !( cin >> wiek ) )
    {
        cin.clear();
        cin.ignore( numeric_limits < streamsize >::max(), '\n' );
        wiek = - 1;
    }
}
while( wiek <= 0 );
P-165288
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
C/C++
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 ?
P-165437
Kinexity
» 2017-10-04 15:07:20
P-165438
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 :/
P-165454
Kinexity
» 2017-10-04 21:14:02
Pierwsze zdanie mówi ci wszystko czego ci w życiu potrzeba. Żadnej innej wiedzy tajemnej nie ma.
P-165455
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
P-165459
« 1 » 2
  Strona 1 z 2 Następna strona