ill

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:
       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ã.

See Also:
il