Baixe o app para aproveitar ainda mais
Prévia do material em texto
8.3 – Leitura e Escrita de Strings na Tela Utilizamos cin e cout para ler e escrever strings, assim como fazemos com variáveis simples. Basicamente, cin e cout tratam strings como se fossem variáveis simples, facilitando sua manipulação e seu uso em programas. Já vimos no programa exemplo anterior que utilizamos cout para exibir strings inteiras na tela. cout exibe todos os caracteres da string, e detecta automaticamente o fim dela. Utiliza-se o comando cin para ler strings através do teclado. A sintaxe é a seguinte: cin >> <nome da strin>; Como já vimos, cin lerá os caracteres inseridos através do teclado até encontrar um espaço em branco (tecla barra de espaço) ou o fim da entrada (tecla Enter). Quando cin encontra um espaço em branco, todos os caracteres após este espaço são ignorados. O programa abaixo lê entradas do teclado para armazenar o nome e sobrenome do usuário dentro de strings. #include <iostream> #include <string> using namespace std; int main() { string nome; string sobrenome; cout<<"Digite seu nome: "; cin >> nome; cout<<"Digite seu sobrenome: "; cin >> sobrenome; cout << "Seu nome é "<<nome<<" e seu sobrenome é “<<sobrenome<<"."<<endl; system("PAUSE > null"); return 0; } Esse programa apresenta alguns problemas quando o usuário possui mais de um nome ou sobrenome. Por exemplo, caso o nome “José Ricardo” seja inserido, a leitura do sobrenome será “ignorada” e o programa exibirá “José” como o nome e “Ricardo” como sobrenome. Da mesma forma, no caso da entrada de um sobrenome duplo, somente o primeiro sobrenome é guardado na string “sobrenome”, sendo o segundo “ignorado”. Isto acontece por causa da maneira que C++ trata os espaços em branco em uma entrada via teclado. Espaços em branco são considerados fim de entrada pelo comando cin; ao invés de descartar os caracteres que vierem após o espaço em branco, C++ os guarda em um buffer (uma espécie de “reserva” ou pilha de dados). Quando cin for chamado novamente, antes de ler a nova entrada do teclado, o programa primeiro utiliza os dados que estão nesse buffer. Assim, temos a impressão que a nova entrada de dados foi descartada pelo programa, mas na verdade ela foi jogada no buffer, esperando uma nova chamada de cin. Dessa forma, cin não é o método recomendado para ler frases inteiras, com palavras separadas por espaços. Para este objetivo, utilizamos o método cin.getline, que já estudamos no módulo 5, com algumas alterações. O método cin.getline lê linhas inteiras de entrada através do teclado, sem se importar com os espaços em branco. Mas a sintaxe do método cin.getline é um pouco diferente, quando trabalhamos com strings: getline ( cin, <nome da string>); Assim, este método recebe todos os caracteres (incluindo os espaços em branco) entrados pelo usuário, até que ele aperte a tecla Enter. O programa abaixo é uma versão melhorada do programa anterior, utilizando o método cin.getline para receber os dados desejados. #include <iostream> #include <string> using namespace std; int main() { string nome; string sobrenome; cout<<"Digite seu nome: "; getline(cin, nome); cout<<"Digite seu sobrenome: "; getline(cin, sobrenome); cout <<"Seu nome é "<<nome<<" e seu sobrenome é "<<sobrenome<<"."<<endl; system("PAUSE > null"); return 0; }
Compartilhar