• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Czy dobrze to interpretuje? | Kod C++

Object Storage Arubacloud
0 głosów
455 wizyt
pytanie zadane 30 marca 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)

Cześć!

Czytam sobie książke, a tu nagle taki kod:

int fill_array(double ar[], int limit)
{
    using namespace std;
    double temp;
    int i;

    for(i=0;i<limit;i++)
    {
        cout << "Podaj wartosc nr " << (i+1) << ": ";
        cin >> temp;

        if(!cin)
        {
            cin.clear();
            while(cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanie danych przerwane.\n";
            break;
        }
        else if(temp<0)
            break;
        ar[i]= temp;
    }
    return i;
}

Nie jestem pewien czy dobrze interpretuje jego część. Mianowicie: 

if(!cin)
        {
            cin.clear();
            while(cin.get() != '\n')
                continue;
            cout << "Bledne dane, wprowadzanie danych przerwane.\n";
            break;
        }

Moja interpretacja: jeżeli wczytywanir danych cin się nie powiodło, pamięć cin zostaje zwolniona. Następnie wykonujemy pętle dopóki wczytany znak jest inny od znaku nowego wiersza. (jeżeli jest inny wykonujemy powrót do początku pętli). Jeżeli pętla się zakończy przejdż do końca (return i)

 

Czy moja interpretacja jest prawidłowa?

Mile widziane pochwały oraz krytyka :)

Pozdrawiam

1 odpowiedź

+1 głos
odpowiedź 30 marca 2017 przez Evelek Nałogowiec (28,960 p.)

cin.clear ustawia flagę błędu na 0, która została zmieniona gdy np. do zmiennej typu int wpiszesz literę.

while(cin.get() != '\n') continue; --> ja to nazywam "czyszczeniem bufora". cin.get() pobiera znaki aż do napotkania znaku '\n'. Zauważmy, że najpierw cin.get() pobiera znak a następnie sprawdza, czy to jest '\n'. Dlatego pętla while jest przerywana, gdy cin.get() pobierze z bufora znak '\n'.

Stephen Prata Język C++ ciężka książka, powodzenia! smiley

komentarz 30 marca 2017 przez WireNess Stary wyjadacz (11,240 p.)
Czyli raczej dobrze interpretowałem :)

 

Tak, Stephen Prata :D Książka owszem - trudna, ale daje radę :)
komentarz 31 marca 2017 przez j23 Mędrzec (194,920 p.)

Zamiast while(cin.get() != '\n') continue; wystarczy użyć metody ignore.

Podobne pytania

0 głosów
2 odpowiedzi 413 wizyt
pytanie zadane 26 maja 2016 w C i C++ przez Ziwer Nowicjusz (200 p.)
0 głosów
5 odpowiedzi 357 wizyt
pytanie zadane 7 listopada 2015 w C i C++ przez aki3130pl Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 97 wizyt
pytanie zadane 13 kwietnia 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)

92,580 zapytań

141,433 odpowiedzi

319,665 komentarzy

61,965 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...