SOP-stdio
Entrada e saída padrão
Explorando printf para mostrar dados na tela
A função printf mostra dados na tela de acordo com um formato (daí seu nome: printf = print formatted, ou imprima formatado). O exemplo mais simples de uso do printf faz com que seja mostrada somente uma constante de texto, como a seguir:
printf("Apenas uma constante de texto ...\n");
O resultado na tela é:
Apenas uma constante de texto ...
Porém printf faz muito mais do que isso. Um segundo uso envolve mostrar dados que misturam constantes de texto e valores numéricos:
int voltas = 15;
float angulo = 3.1416;
printf("Contador de voltas = %d\n", voltas);
printf("Angulo da volta atual = %f radianos\n", angulo);
Na tela será mostrado o seguinte:
Contador de voltas = 15 Angulo da volta atual = 3.1416 radianos
Esse segundo exemplo mostra como especificar o formato do que deve aparecer na tela. O formato é o primeiro argumento da função printf, e ele contém uma especificação do texto que deve aparecer na tela. Nesse texto podem-se indicar valores a serem substituídos (eles aparecem prefixados com %), os quais devem ser fornecidos nos demais argumentos da função. No primeiro printf do exemplo acima, o formato é:
"Contador de voltas = %d\n"
Nesse texto, toda sequência de caracteres que iniciar com % indica que ali deve-se substituir por um valor. Dependendo da letra que vier depois de %, o tipo de valor será int (inteiro), float (real), double (real com mais casas), char (caractere), string (texto). A tabela abaixo exemplifica os diferentes tipos de valores que podem ser especificados no formato da função printf:
Tipo de dados | Formato | Exemplo | O que aparece na tela |
---|---|---|---|
int | %d | int horas=2;
printf("Já se passaram %d horas ...\n", horas);
|
Já se passaram 2 horas ... |
char | %c | char letra = 'S';
printf("Você digitou a letra %c !\n", letra);
|
Você digitou a letra S ! |
float | %f | float media = 4.5;
printf("Média calculada=%f\n", media);
|
Média calculada=4.5 |
double | %g | double angulo = 0.1122333;
printf("Angulo=%g\n", angulo);
|
Angulo=0.111222333 |
char * (string) | %s | char * nome = "Filomena";
printf("Cara sra. %s ...", nome);
|
Cara sra. Filomena ... |
Para substituir mais de um valor, basta especificar no formato e fornecer os valores nos demais argumentos:
int hora = 10, minuto = 5, segundo = 0;
printf("Horario: %d:%d:%d\n", hora, minuto, segundo);
... o que faz aparecer na tela:
Horario: 10:5:0
Esse último exemplo poderia ser melhorado, pois o horário ficou esquisito de ler ... normalmente costumamos ver horas, minutos e segundos com dois algarismos, como a seguir:
Horario: 10:05:00
É possível fazer com que printf faça isso automaticamente, bastando especificar o seguinte no formato:
int hora = 10, minuto = 5, segundo = 0;
printf("Horario: %02d:%02d:%02d\n", hora, minuto, segundo);
Note que ao invés de %d se especificou %02d. Esse formato faz com que se mostre um número inteiro com no mínimo dois algarismos. Caso o número tenha somente um algarismo, printf automaticamente adiciona um 0 à esquerda. Isso funciona somente para formatos numéricos.
Além de acrescentar zeros à esquerda de valores numéricos, é possível tabular os valores mostrados de forma que ocupem uma certa quantidade de colunas. Por exemplo, caso se deseje mostrar o seguinte:
Nome Idade Sexo Marcelo 39 M Marina 9 F Luis 11 M
... pode-se fazer assim:
printf("%-12s %-12s %s\n", "Nome", "Idade", "Sexo");
printf("%-12s %-12d %c\n", "Marcelo", 39, 'M');
printf("%-12s %-12d %c\n", "Marina", 9, 'F');
printf("%-12s %-12d %c\n", "Luis", 11, 'M');
Note que desta vez adicionou-se após % a sequência -12. Isso indica que o valor a ser mostrado deve ocupar no mínimo 12 posições, preenchendo-se com espaços caso necessário. Veja que os valores foram alinhados à esquerda. Caso se deseje que sejam alinhados à direita, basta fazer assim:
printf("%12s %12s %s\n", "Nome", "Idade", "Sexo");
printf("%12s %12d %c\n", "Marcelo", 39, 'M');
printf("%12s %12d %c\n", "Marina", 9, 'F');
printf("%12s %12d %c\n", "Luis", 11, 'M');
... e assim aparecerá o seguinte na tela:
Nome Idade Sexo Marcelo 39 M Marina 9 F Luis 11 M
Explorando scanf para ler dados do teclado
xxx