Exemplo C++ – Validar o tipo de dados recebido via cin

Quando estamos a escrever pequenos programas, que utilizam o objeto cin para fazer a leitura de valores, é frequente depararmos com situações deste tipo:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    cin >> nota;
    if(nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Se repararem, o programa funciona muito bem se o utilizador for “educadinho”, ou seja, se fornecer apenas números inteiros.

No caso de este ser distraído, ou malandreco, em vez de um número inteiro, os resultados podem ser imprevisíveis. Experimentem e vejam o que acontece para os seguintes exemplos de input:

  • t
  • Z
  • x

Pois é! Todos reprovados, mesmo sem se saber a nota. Nem uma satisfação!

Uma forma muito simples de contornar esta limitação é a seguinte:

#include <iostream>
using namespace std;
int main()
{
    int nota;
    if(!(cin >> nota) || nota<0 || nota>20)
        cout << "Inseriu uma nota inválida" << endl;
    else
        if(nota<10)
            cout << "O aluno foi reprovado" << endl;
        else
            cout << "O aluno foi aprovado" << endl;
    return 0;
}

Atendendo a que nota é uma variável do tipo int, cin >> nota irá devolver o valor lógico falso caso não receba um número inteiro (int).

Assim sendo, basta adicionais mais uma condição ao nosso if!

Anúncios

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s