leitura istream após falha
Eu tenho um pequeno pedaço de código para ler os dados do usuário, como abaixo:
#include<iostream>
#include<vector>
#include<algorithm>
#include<ios>
#include<iomanip>
#include<string>
using namespace std;
istream& read_dt(istream& in, vector<int>& nmbr) {
if(in) {
nmbr.clear();
int x;
while(in >> x) {
nmbr.push_back(x);
}
if(in.fail()) {
string s;
in >> s;
in.clear();
}
}
return in;
}
int main() {
vector<int> data;
cout << "Enter all the data: " << endl;
read_dt(cin, data);
cout << "Size: " << data.size() << endl;
}
Ao compilar e executar esse programa acima, usando os seguintes dados: 1 2 3 4 r t 5 6 7
Parece que recebo um vetor de tamanho 4 em vez de 7. O que eu implementei acima é que, quando um usuário fornece entradas inválidas como dados (neste caso 'r' e 't'), esses dados são descartados e a entrada é limpa (usando in.clear ()) e as entradas restantes são "enviadas" para os dados vetoriais.
Mas isso não parece estar acontecendo. O que estou fazendo errado? Alguém pode ajudar por favor?
Obrigado.