Carregando
0x40Lição 5 de 20

Entrada e saída

Formate a saída com precisão usando o printf e leia o que o usuário digita com o scanf.

12 min Questionário com 5 perguntas 2 exercícios de código
Ao final desta lição, você saberá
  • Formatar números com largura e precisão no printf
  • Ler números do usuário com scanf e &
  • Verificar se a entrada foi realmente lida

Os programas ficam interessantes quando respondem a uma entrada. A biblioteca padrão do C dá a você o printf para escrever texto formatado e o scanf para lê-lo, os dois de <stdio.h>.

Especificadores de formato do printf

O printf recebe uma string de formato seguida de valores. Cada especificador % no formato é substituído pelo próximo valor, então os tipos precisam combinar:

EspecificadorParaExemplo de saída
%dint42
%fdouble3.140000
%.2fdouble, 2 casas decimais3.14
%ccharA
%sstringhello
%5dint, preenchido até a largura 5 42
%-5dint, alinhado à esquerda na largura 542
%05dint, preenchido com zeros00042
receipt.c
1#include <stdio.h>
2
3int main(void) {
4    printf("%-8s%6s\n", "Item", "Price");
5    printf("%-8s%6.2f\n", "Coffee", 3.5);
6    printf("%-8s%6.2f\n", "Bagel", 2.25);
7    return 0;
8}
Saída
Item     Price
Coffee    3.50
Bagel     2.25

Lendo a entrada com o scanf

O scanf usa o mesmo tipo de string de formato, mas ele escreve nas suas variáveis. Para deixá-lo fazer isso, você passa o endereço de cada variável com &. (Você vai aprender exatamente o que são endereços na aula de ponteiros; por enquanto, lembre: o scanf precisa de & na frente de variáveis int, double e char.)

double_it.c
1#include <stdio.h>
2
3int main(void) {
4    int number;
5    printf("Enter a number: ");
6    if (scanf("%d", &number) != 1) {
7        printf("That was not a number.\n");
8        return 1;
9    }
10    printf("Twice that is %d\n", number * 2);
11    return 0;
12}

Dois detalhes que vale copiar em todo programa que você escrever:

  • O scanf devolve quantos valores conseguiu ler. Se o usuário digitar abc quando você pediu %d, ele devolve 0 e deixa number intacto. Verifique.
  • Para double, o scanf usa %lf (e não %f, que é para float). Este é um dos poucos lugares em que printf e scanf diferem.

Lendo vários valores

scanf("%d %d", &a, &b) lê dois inteiros separados por qualquer espaço em branco - espaços ou quebras de linha. Nos exercícios desta página, a entrada é fornecida para você (como um arquivo redirecionado para o seu programa), então você pode se concentrar na lógica.

Principais conclusões

  • Os especificadores do printf precisam combinar com os tipos dos valores: %d int, %f double, %c char, %s string. Largura e precisão vão entre o % e a letra (%6.2f).

  • O scanf precisa do endereço de cada variável (&x) e usa %lf para double.

  • O scanf devolve quantos valores leu - verifique.

Quiz da aula

5 perguntas · aprovação com 4 acertos · até 50 XP

Ao passar, você conclui a aula e mantém sua sequência. As perguntas erradas voltarão em sessões de revisão.

Pratique: escreva código em C

Estes exercícios rodam de verdade. Escreva o programa, clique em “Executar testes” e leia o que o compilador informa: aprender a ler as mensagens do compilador é metade do aprendizado de C.

Exercício 1

Some dois números

+25 XP

Leia dois inteiros da entrada e imprima a soma deles neste formato:

3 + 4 = 7

A entrada são dois números separados por um espaço.

  • 3 e 4
  • -10 e 25
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Exercício 2

Conversor de temperatura

+25 XP

Leia uma temperatura em Celsius (um número decimal) e imprima-a em Fahrenheit com uma casa decimal. F = C × 9 / 5 + 32.

21.5C = 70.7F
  • 21.5 C
  • -40 C
  • 100 C
main.c
Carregando editor…

Seu código é compilado com gcc 14 (-Wall -Wextra) e executado no Compiler Explorer (godbolt.org), um serviço público gratuito.

Dúvidas sobre esta lição

Travou em algum ponto? Pergunte. Descobriu algo? Compartilhe. Explicar também é uma ótima forma de aprender.

Carregando publicações…