pelta do while

0

Napisalem program ktory sprawdza czy uzytkownik wprowdzil wartosc int. Zalozenie jest takie: jesli jest int program sie konczy, jezeli nie, wraca na poczatek petli w celu ponownego wpisania danej.
Nie wiem dlaczego w przypadku wpisaniu wartosci np string. Program sie zapetla - nie moge wpisac poprawnej wartosci int.

#include <iostream>

using namespace std;


int liczba;

int main()
{
   do
    {
     cin.sync();
     cin.clear();

     cout << "Podaj liczbe: "<<endl ;
     cin >> liczba;


    } while (cin.good() ==0) ;


    return 0;
}
 

Dlaczego?

0
#include<iostream>
#include<limits>
using namespace std;
int main(){
    cout << "Enter an int: ";
    int x = 0;
    while(!(cin >> x)){
        cin.clear();
        cin.ignore(numeric_limits<streamsize>::max(), '\n');
        cout << "Invalid input.  Try again: ";
    }
    cout << "You enterd: " << x << endl;        
    return 0;
}
0

http://4programmers.net/C/FAQ/Zabezpieczenie_przed_wpisywaniem_liter
ten art wisi już 5 lat a nadal niektórzy z uporem maniaka piszą ten kod od nowa... ;]

0

Ale dlaczego moja petla nie czeka na ponowne wpisanie liczby?
Co zrobilem źle?

0

Brak cin.ignore

1
polsky77 napisał(a):

Ale dlaczego moja petla nie czeka na ponowne wpisanie liczby?
Co zrobilem źle?

Odwrotna kolejność: sync, clear

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