Quiz interativo sobre scanf em C.
int a; double b; printf("Enter a: "); scanf("%d", &a); printf("Enter b: "); scanf("%lf", &b); printf("a is %d, b is %f \n", a, b);
a é um int impresso com %d → 5. b é um double impresso com %f → 3.000000 (%f mostra 6 casas decimais por padrão). Ambos os especificadores de formato casam com seus tipos, então a saída está correta.
scanf("%d", a); // faltou o &! scanf("%lf", b); // faltou o &!
scanf precisa do endereço da variável (prefixado com &). Sem o &, o scanf trata o valor da variável como se fosse um endereço e escreve lá, causando acesso inválido à memória e, muito provavelmente, um travamento.int a é lido com %lf, e um double b é lido com %d.int a; double b; scanf("%lf", &a); // %lf para int! scanf("%d", &b); // %d para double!
printf("a is %d, b is %f", a, b) imprime?scanf lê várias variáveis. Repare no espaço entre os especificadores de formato.int a, b; printf("Enter two integers: "); scanf("%d %d", &a, &b); printf("a=%d, b=%d\n", a, b);
3 7 (com um espaço no meio) e pressiona Enter, o que é impresso?scanf pode ler várias variáveis. O formato "%d %d" lê dois inteiros separados por espaço em branco (espaço, tab ou nova linha).%d ← primeiro inteiro 3 → a%d ← próximo inteiro 7 → b3 7, 3 7 (vários espaços), ou até entrada quebrada em linhas, todos funcionam.
printf, %f funciona para um double. A mesma regra vale para o scanf?double x; printf("Enter a number: "); scanf("%f", &x); // %f em vez de %lf! printf("x = %f\n", x);
3.14 e pressiona Enter, o que é impresso?printf aceita %f para um double, mas o scanf exige %lf para um double.%f, o scanf escreve 4 bytes (assumindo um float) no endereço fornecido, o que preenche apenas parcialmente o double de 8 bytes → o valor é lixo.%f serve; no scanf, você deve usar %lf.
int a; scanf("a=%d", &a); // "a=" incluído no formato printf("a = %d\n", a);
5?"a=%d" diz "a entrada começa com a=, seguido de um inteiro". Então a=5 funciona, mas um 5 sozinho não casa com o a= inicial, e o scanf não lê, deixando a sem atribuição.%d e %lf.
scanf é chamado duas vezes para ler tipos diferentes.int age; double height; printf("Age: "); scanf("%d", &age); printf("Height (cm): "); scanf("%lf", &height); printf("%d years, %.1fcm\n", age, height);
25 (Enter) e depois 170.5 (Enter), qual é a saída?%d com &int, %lf com &double), você pode chamar scanf seguidamente quantas vezes precisar. Novas linhas entre entradas são tratadas automaticamente.%.1f, então a saída é 170.5 (arredondado para uma casa decimal), não 170.500000.