c++,petla pomiijanie danych niebędących liczbami

0

witam, może od razu przejdę do problemu:
1.) W pierwszym while'u jeżeli obiekt cin otrzyma do wpisania do tablicy int'ów -golf[i] - typ inny niż int to spowoduje - przez negację, że wejdzie do środka pętli, tak ?
2.) rozumiem, że musimy uzyć cin.clear() aby wyczyścić cin z nieprawidłowych - które spowodowały wejście do pętli - danych. Nie wiem po co ten drugi while nie rozumiem o co chodzi z tym "pozbywaniem się błędnych danych", przecież cin.get() wczytuje wiersz, a skoro użyliśmy cin.clear() to cin jest wyczyszczone tak ? czyli skąd on chce pobierać cokolwiek do tego warunku w drugim while'u ?
3.)załóżmy, że coś tam jest w tym cin'ie to warunek mówi, że jeżeli nie natknie się na znak nowego wiersza to "continue" czyli pomija resztę rzeczy w pętli - "cout << "proszę podać liczbę: " - i od nowa wczytuje z "!(cin >> golf[i])", tak ? bo pokaże przykładowe uruchomienie programu
Proszę podać swoje wyniki w golfie.
Musisz podać wynik 5 gier.
tura 1.: 88
tura 2.: 87
tura 3.: czy muszę?
Proszę podać liczbę: 103
tura 4.: 94
...
Przecież po błędnym wczytaniu danych - "czy muszę", program nie wykonuje continue, bo wyświetla to co po nim jest czyli napis o podanie liczby, czyli warunek w drugim while'u jest fałszywy ? czy to dlatego, że NIE MA klamrowych które obejmują i continue i napis tak się dzieje ? ale to jaki jest sens pisania continue ... ? jaki jest sens drugiej pętli...

for (i=0; i<Max; i++)
 {
    cout << "tura " << i+1 << ".: ";
    while (!(cin >> golf[i])) {
          cin.clear();              // zerowanie obiektu cin
          while (cin.get() != '\n') 
                continue;           //pozbycie się błędnych danych
          cout << "Proszę podać liczbę";
    }
 }
0

przekombinowałeś, continue dotyczy pętli najbardziej wewnętrznej czyli w tym wypadku while (cin.get() != '\n')), czyli jest zupełnie bezsensu.

for (i=0; i<Max; )
 {
    cout << "tura " << i+1 << ".: ";
    if (cin >> golf[i]) {
          ++i; // zwiększanie 'i' tylko, gdy wczytano poprawnie
          continue;
    }
    // to:
    string trash;
    cin.clear();
    cin >> trash;
    // // albo to:
    // cin.sync(); // czyści standardowe wejście do zera
 }

1 użytkowników online, w tym zalogowanych: 0, gości: 1