Revise as aulas 1 a 7 com uma folha de consulta, seis questões de leitura de código e uma lista de erros frequentes.
#include <stdio.h> int main(void) { printf("Hello\n"); return 0; }
| Tipo | Exemplo | printf | scanf |
|---|---|---|---|
| int | 42 | %d | %d |
| double | 3.14 | %f | %lf |
%.2f(duas casas decimais)%5d(cinco posições, alinhado à direita).printf("x=%d, y=%d\n", x, y); printf("%.2f", 3.146); // → 3.14 (arredondado) printf("%5d", 42); // → 42 (largura 5, à direita) printf("%05d", 42); // → 00042 (preenchido com zeros)
%d ou %f dentro de "..." corresponde a um argumento seguinte. Separe os argumentos por vírgulas.int n; scanf("%d", &n); // & obrigatório! double x; scanf("%lf", &x); // double usa %lf
%f ).int a = 10; // a:10 int b = 30; // b:30 b = a; // b:10 (substitui 30) a = 5; // a:5 (substitui 10) // Resultado: a=5, b=10
int a = 10, b = 30; b = a; a = 5; printf("%d %d\n", a, b);
a=10 e b=30. Em seguida, b=a copia 10 para b, substituindo 30. Por fim, a=5 substitui apenas a. Portanto, a saída é 5 10.int x = 7; printf("%f\n", x);
%f, que espera um argumento double, para exibir um int causa comportamento indefinido: o resultado não é confiável. Muitos compiladores emitem um aviso, mas ainda geram o executável. Use %d para int e %f para double e leia os avisos do compilador.double a = 3.146, b = 3.144; printf("%.2f %.2f\n", a, b);
%.2f exibe duas casas decimais, arredondando o valor. Para 3.146, o terceiro decimal é 6, e a saída é 3.15. Para 3.144, o terceiro decimal é 4, e a saída é 3.14. Em geral, valores double não representam todos os decimais exatamente; casos na fronteira podem depender da representação e do modo de arredondamento.printf("x=%d", 3); printf("y=%d\n", 7);
printf não acrescenta espaços nem quebras de linha automaticamente. A saída x=3 é seguida imediatamente por y=7, formando x=3y=7. Para mudar de linha, inclua \n no ponto desejado.int n; scanf("%d", n); // ← & foi esquecido printf("%d\n", n);
scanf recebe o endereço da variável, indicado por &, e grava nesse local. Sem &, o conteúdo da variável não inicializada é passado como se fosse um endereço; isso causa comportamento indefinido e pode provocar uma falha de memória. Um aviso do compilador pode não impedir a compilação: leia os avisos.double x; scanf("???", &x); printf("%f\n", x);
%lf (letra l seguida de f). printf aceita tanto %f quanto %lf para double, mas scanf distingue esses formatos: %f espera float*, e %lf espera double*. Essa diferença é uma fonte comum de erros.scanf("%d", &n), e não scanf("%d", n). Ao ler uma string em um array de char, o nome do array já fornece o endereço.\n .
;, examine também uma ou duas linhas antes do local indicado pelo compilador."x=%d, y=%d" exige os argumentos seguintes na ordem x, y . Inverter a ordem também inverte os valores exibidos.
a = 5 atribui 5 a a; a == 5 testa se a é igual a 5.