Jiraspiom

Blog Pessoal

Lição 05

Lição 5 – Entrada e Saída de Dados

Entrada e Saída de Dados

A partir desta parte do curso começaremos a interagir com o usuário por meio dos padrões da biblioteca de entrada/saída. C++ usa uma abstração chamada stream para executar operações de entrada e saída em aparatos como tela ou teclado. Uma Stream é um objeto de onde o programa pode inserir ou extrair caracteres.

Por padrão, a saída de um programa é a tela e o objeto stream definido para acessá-la é “cout”. Cout é usada em conjunto com o operador de inserção: <<.
Exemplo:

cout << “Olá Mundo”; // Olá Mundo é impresso na tela;
cout << x; // imprime na tela o valor de x;
cout << “x”; // imprime a string/caracter x na tela;
cout << “Olá Mundo, ” << “isto é” << “uma frase”; //imprime na tela “Olá Mundo, isto é uma frase”.
cout << “Olá Mundo, este é o ” << num << ” exemplo da ” << numlicao << ” lição”;

O operador << insere o dado que o segue na stream que o precede. Nos casos anteriores, x e a string “Olá Mundo” são inseridas em ‘cout’, por exemplo. Deve-se ressaltar que o ‘cout’ não insere uma quebra de linha automática, devendo esta ser explicitada.

cout << “Isto é uma frase”;
cout << ” sem quebra de linha automática.”;

O exemplo anterior será mostrado desta maneira:

Isto é uma frase sem quebra de linha automática.

Já neste caso:

cout << “Isto é uma frase\n”;
cout << “com quebra de\n”;
cout << “linha automática.”;

a frase será impressa desta maneira:

Isto é uma frase
com quebra de
linha automática.

Para imprimirmos a frase com a quebra de linha também podemos usar o manipulador endl (endline), da seguinte maneira:

cout << “Frase com” <<endl;
cout << “quebra de linha” << endl;

que mostrará na tela:

Frase com
quebra de linha

Entrada e Saída de Dados – continuação

O padrão de entrada de dados é, usualmente, o teclado. Para manipular a entrada padrão de dados em C++ usamos o operador de extração >> na stream cin. Este operador deve ser seguido pela variável que irá armazenar os dados que serão extraídos da stream. Desta maneira:

int numero;
cin >> numero;

A primeira linha declara uma variável numero do tipo int e a segunda linha espera que o usuário digite algo, alguma entrada de dados do cin (o teclado) para armazenar na variável inteira. É interessante notar que o cin só pode processar a entrada do teclado uma vez que a tecla de retorno tiver sido pressionada. Com isso, mesmo se fizermos a requisição de um caracter simples, a extração do cin não vai processar a entrada até que o usuário pressione a tecla de retorno depois que o caracter for introduzido.
Exemplo:

// exemplo de entrada e saída…
#include <iostream>
using namespace std;

int main ()
   {
      int i;
      cout << “Insira um valor inteiro: “;
      cin >> x;
      cout << “O valor inserido é ” << x;
      cout << ” e seu quadrado é ” << x*x << “.\n”;
      return 0;
   }

resultado:

Insira um valor inteiro: 10
O valor inserido é 10 e seu quadrado é 100.


Podemos usar cin para pedir ao usuário que insira mais de um dado: São equivalentes os dois exemplos:

cin >> x >> y;

e
cin >> x;
cin >> y;

OBS: se um valor inteiro é requisitado no código e o usuário insere um nome, por exemplo, pode resultar em mal funcionamento do programa. Ao usar entrada de dados com as extrações cin, temos que confiar que o usuário irá inserir os dados corretamente, sem caracteres ou algo similar quando é preciso. Mais à frente, quando formos ver a classe stringstream, veremos uma possível solução para esses tipos de erros.

Podemos ainda usar o cin para extrair strings da mesma maneira que fizemos com os outros tipos de váriaveis usando o mesmo operador >>.

cin >> frase


Contudo, essa extração com o cin para de ler dados do usuário assim que encontra um espaço em branco. Sendo desta maneira, só podemos pegar uma palavra do usuário por extração, e não uma frase inteira. Para pegarmos as frases inteiras podemos usar a função getline, que é mais recomendável. Teremos, por exemplo, como resultado se o nome inserido pelo usuário for “Fulano de Tal”:

#include <iostream>
#include <string>
using namespace std;int main ()
   {
      string nome;
      cout << “Por favor, insira seu nome completo: “;
      getline (cin, nome);
      cout << “Olá, ” << nome << “.\n”;
      return 0;
}


resultado:

Por favor, insira seu nome completo:
Olá Fulano de Tal.

Stringstream

O cabeçalho padrão stringstream define a classe stringstream que permite que um objeto baseado numa string seja tratado como uma stream. Assim, podemos fazer operações de extração ou inserção de/para strings, especialmente úteis para converter strings para valores numéricos e vice-versa. Se quisermos extrair um inteiro de uma strings podemos fazer:

string snum (“1997”);
int numero;
stringstream(snum) >> numero;

Após isto, a variável numero deve conter o numérico 1997.

// stringstreams
#include <iostream>
#include <string>
#include <sstream>
using namespace std;

int main ()
   {
      string recebe;
      int anonum=0;
      int mesnum=0;
      int dianum=0;

      cout << “Entre com o ano do seu nascimento: “;
      getline (cin,recebe);
      stringstream(recebe) >> anonum;
      cout << “Entre com o mês do seu nascimento: “;
      getline (cin,recebe);
      stringstream(recebe) >> mesnum;
      cout << “Entre com o dia do seu nascimento: “;
      getline (cin,recebe);
      stringstream(recebe) >> dianum;
      cout << “Data de nascimento: ” << dianum << mesnum << anonum <<endl;
      return 0;
}

que resulta em:

Entre com o ano do seu nascimento: 1982
Entre com o mês do seu nascimento: 01
Entre com o dia do seu nascimento: 15
Data de nascimento: 15 01 1982

Anúncios
%d blogueiros gostam disto: