• Nenhum resultado encontrado

Fato Histórico 2

Sintaxe 2.4: Comando de Entrada

cin >> variable1 >> variable2 >>... >> variablen;

Exemplo:

cin >> pennies;

cin >> first >> middle >> last; Finalidade:

Ler valores de entrada para uma ou mais variáveis. Figura 1 Processando a entrada. Figura 2 Entrada falhou. Entrada do usuário Entrada do usuário estado: bom inalterado estado: falho

(ver Figuras 3 e 4). Tudo o que importa é que os números sejam separados por espaços em branco: isto é, espaços vazios, tabulações ou nova linha. Você entra com um espaço vazio pressionando a barra de espaço, uma tabulação pressionando a tecla tab (quase sempre marcada com uma flecha e uma barra vertical →| ), e uma nova linha pressionando Enter. Estas teclas são usadas pelo leitor dos dados de entrada para separar os dados de entrada.

A entrada via teclado é buferizada. Fileiras de caracteres de entrada são colocadas juntas, e a linha de entrada completa é processada quando você pressiona Enter. Por exemplo, suponha que o programa de cálculo de moedas solicita a você:

Quantas moedas de 1 centavo (pennies) você tem?

Como resposta você digita 8 0 4 3

Nada acontece até que você pressione a tecla Enter. Suponha que você a pressione. A linha agora é enviada para processamento pela cin. O primeiro comando de entrada lê o 8 e o remove do stream de entrada e os outros três números são deixados lá para as operações de entrada sub- seqüentes.

Então, o prompt:

Quantas moedas de 5 centavos (nickels) você tem?

Figura 4

Separando a entrada com novas linhas. Figura 3

Separando a entrada com espaços. Entrada do usuário

Entrada do usuário:

Entrada do usuário:

Entrada do usuário:

é exibido e o programa imediatamente lê o 0 da linha parcialmente processada. Você não terá a chance de digitar outro número. A seguir os outros dois prompts serão exibidos e outros dois nú- meros processados.

Naturalmente, se você sabe qual entrada o programa deseja, esta facilidade de digitar todos os dados pode ser prática, mas é surpreendente para a maioria dos usuários que estão acostumados com processamento de entradas mais organizado. Francamente, a entrada a partir de cin não é muito adequada para interação com usuários humanos. Ela funciona bem para ler dados de um ar- quivo e também é bastante simples de ser programada.

2.3

Atribuição

Todos os programas, até os mais simples, usam variáveis para armazenar valores. Variáveis são posições de memória que podem armazenar valores de um tipo particular. Por exemplo, uma va- riável total armazena valores de tipo doubleporque nós a declaramos como double to- tal. Até agora, as variáveis que usamos não eram muito variáveis. Uma vez armazenado um valor nelas, seja por inicialização ou por um comando de entrada, o valor nunca mudava. Vamos calcular o valor das moedas de modo diferente, mantendo um total incremental.

Primeiro, solicitamos o número de pennies e colocamos o total como sendo o valor dos pen- nies. Depois, solicitamos o número de nickels e adicionamos o valor de nickels ao total. A seguir, fazemos o mesmo para dimes e quarters. Aqui está o programa.

Arquivo coins3.cpp 1 #include <iostream> 2 3 using namespace std; 4 5 int main() 6 {

7 cout << "Quantas moedas de 1 centavo (pennies) você tem? ";

8 int count;

9 cin >> count;

10 double total = count * 0.01;

11

12 cout << "Quantas moedas de 5 centavos (nickels) você tem? ";

13 cin >> count;

14 total = count * 0.05 + total;

15

16 cout << "Quantas moedas de 10 centavos (dimes) você tem? ";

17 cin >> count;

18 total = count * 0.10 + total;

19

20 cout << "Quantas moedas de 25 centavos (quarters) você tem? ";

21 cin >> count;

22 total = count * 0.25 + total;

23

24 cout << "Valor total = " << total << "\n";

25

26 return 0;

27 }

Em vez de ter quatro variáveis para contar as moedas, agora temos apenas uma variável, count. O valor de countrealmente varia durante a execução do programa. Cada comando de entrada

cin >> count

coloca um novo valor em count, descartando o conteúdo anterior.

Neste programa, necessitamos somente uma variável countpor que processamos o valor em seguida, acumulando-o em total. O processamento é feito através de comandos de atribuição (ver

Sintaxe 2.5). O primeiro comando de processamento, total = pennies * 0.01, é simples. O segundo comando é bem mais interessante:

total = count * 0.05 + total;

Ele significa, “Calcule o valor da contribuição de nickel (count * 0.05), adicione-o ao valor do total incremental e coloque o resultado novamente na posição de memóriatotal” (ver Figura 5).

Quando você faz uma atribuição de uma expressão a uma variável, os tipos da variável e da ex- pressão devem combinar. Por exemplo, é um erro atribuir

total = "um monte";

porquetotalé uma variável de ponto flutuante e "um monte"é um string. É, entretanto, legal armazenar um inteiro em uma variável de ponto flutuante.

total = count;

Se você atribui uma expressão em ponto flutuante a um inteiro, a expressão será truncada para um inteiro. Infelizmente, este não necessariamente será o inteiro mais próximo: o Erro Freqüente 2.1 contém um exemplo dramático. Portanto, nunca é uma boa idéia fazer uma atribuição de ponto flu- tuante para inteiro. De fato, muitos compiladores emitem um aviso se você fizer.

Aqui está uma diferença sutil entre os comandos double total = count * 0.01; e

total = count * 0.05 + total;

O primeiro comando é a definição de total. Este é um comando para criar uma nova variá- vel do tipo double, dar a ela o nome total, e a inicializar com count * 0.01. O segundo comando é um comando de atribuição: uma instrução para substituir o conteúdo existente em uma variável total por outro valor.

Sintaxe 2.5: Atribuição