Mam program, który pobiera wartości int z klawiatury, po wpisaniu innej wartości niż int np. znaku ‘|’ wychodzi z pętli i… no własnie wychodzi również z konsoli, a nie pozwala wpisać wartości n(ile liczb początkowych chcę zsumować).
vectorliczby;
int liczba;
while(cin >> liczba){
if(cin)
liczby.push_back(liczba);
else
cout << "Zle dane wejsciowe: " << endl;
}
cout << "Podaj liczbe N: " << endl;
int n;
cin >> n;
int suma = 0;
if (n <= liczby.size()){
for (int i = 0; i < n; ++i)
suma += liczby[i];
} else
cout << "Za duza wartosc n, maksymalna wartosc n to: " << liczby.size() << endl;
cout << "Suma trzech pierwszych liczb: " << suma << endl;
Chcę napisać program, który wczytuje serię liczb za pomocą pętli while i zapisuje je w vector. Gdy użytkownik skończy podawanie liczb(wpisując dowolny znak w pętli while zamiast wartości int)powinien przerwać wczytywanie liczb i spytać (cin >> n) ile wartości początkowych z wektora ma zsumować. Ostatnim krokiem jest wypisanie sumy n pierwszych liczb.
Nie rozumiem dlaczego po wpisaniu np: 2, 4, 6, | program kończy zadanie zamiast wypisać “Podaj liczbe N:”?
failbit - błąd zwiazany ze złym typem przyjętej danej, tak jak tu pobiera char zamiast int;
badbit - w ogóle jakaś klapa
Po wystąpieniu któryś z tych trzech ostatnich, aby strumień mógł dalej pracować trzeba go wyczyścić, a następnie zsynchronizować, żeby usunąć wszystko z bufora :
cin.clear(cin.rdstate() & ~ios::failbit); // tu czyścimy tylko flagę failbit;
lub poprostu
cin.clear(); // czyścimy cały strumień;
cin.sync(); // synchronizacja;