Manipulador que ignora todos os caracteres até ao próximo fim-de-linha ('\n') mas primeiro limpa possíveis condições de erro do canal. O nome é uma abreviatura de "ignora linha limpa".Exemplo de utilização
Suponha que se pretende ler do teclado um inteiro que tem de ser não-negativo (o número de um aluno, por exemplo). A solução óbvia é:
cout << "Introduza um número não negativo: "; int numero; cin >> numero; cout << "O número é: " << numero << endl;Esta solução tem dois problemas:É importante perceber que, neste caso, se assume que ao teclado está um humano, que reconhece e espera poder corrigir os seus erros! Assim, a solução passa por escrever um ciclo:
- Se a extracção tiver sucesso, não garante que o valor lido é não-negativo.
- Se a extracção não tiver sucesso, o canal cin fica com uma condição de erro, o que faz com que todas as extracções subsequentes falhem.
int numero; while(true) { cout << "Introduza um número não negativo: "; cin >> numero >> il; if(numero >= 0) break; cout << "Tem de ser não negativo!" << endl; } cout << "O número é: " << numero << endl;Note-se na utilização do manipulador il, que é usado para que a leitura seja orientada por linha.Esta solução resolve o primeiro problema, mas não o segundo... A solução passa por verificar também se a extração teve sucesso. Caso não tenha tido sucesso é necessário limpar a condição de erro e ignorar toda a linha. Dessa forma o utilizador pode voltar a tentar introduzir um número:
int numero; while(true) { cout << "Introduza um número não negativo: "; if(cin >> numero >> il && numero >= 0) break; if(cin) cout << "Tem de ser não negativo!" << endl; else { cout << "Isso não é um número!" << endl; // Ignora resto da linha limpando condição de erro. cin >> ill; } } cout << "O número é: " << numero << endl;Idealmente esta solução seria encapsulada numa função que devolvesse o número e fosse parametrizada pela condição a verificar pelo valor (neste caso tem de ser não negativo) e pelas mensagens a escrever no ecrã.