• 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++

0 głosów
667 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 (195,220 p.)

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

Podobne pytania

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

93,605 zapytań

142,529 odpowiedzi

322,999 komentarzy

63,096 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

Kursy INF.02 i INF.03
...