Menu
CoddyTech

Entrada de Strings com scanf

Parte da seção Lógica e Fluxo do Journey de C da Coddy. Lição 14 de 63.

Agora que você entende como as strings funcionam com o terminador nulo, é hora de aprender a obter entradas de texto dos usuários. A função scanf pode ler strings usando o especificador de formato %s, mas ela tem limitações importantes que você precisa entender.

Para ler uma string com scanf, você usa o formato %s e passa o nome do seu array de caracteres (sem o operador &, já que os nomes de arrays já são endereços):

char word[50];
printf("Enter a word: ");
scanf("%s", word);
printf("You entered: %s\n", word);

No entanto, scanf("%s", ...) tem uma limitação crítica: ele para de ler assim que encontra qualquer caractere de espaço em branco (espaço, tabulação ou quebra de linha). Isso significa que, se um usuário digitar "Hello World", scanf capturará apenas "Hello" e deixará "World" no buffer de entrada.

Outra preocupação séria é que scanf não verifica se a entrada cabe no seu array. Se alguém digitar uma palavra maior do que o seu array consegue armazenar, isso causará um estouro de buffer, podendo travar o seu programa ou criar vulnerabilidades de segurança. Sempre garanta que seu array de caracteres seja grande o suficiente para a entrada esperada.

Apesar dessas limitações, scanf("%s", ...) é perfeitamente adequado para ler palavras isoladas, que é exatamente o que você vai praticar no próximo desafio.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre como ler uma entrada de texto do usuário usando scanf e exibi-la novamente. Seu programa deve:

  1. Declarar um array de caracteres chamado username com 30 elementos para armazenar a entrada do usuário
  2. Declarar um array de caracteres chamado hobby com 25 elementos para armazenar outra entrada
  3. Usar printf para solicitar que o usuário informe a mensagem Enter your username:
  4. Usar scanf com o especificador de formato %s para ler o nome de usuário no array username
  5. Usar printf para solicitar que o usuário informe a mensagem Enter your hobby:
  6. Usar scanf com o especificador de formato %s para ler o hobby no array hobby
  7. Imprimir as duas strings usando printf exatamente no formato mostrado abaixo

A entrada será fornecida como duas palavras separadas (sem espaços dentro de cada palavra).

Sua saída deve exibir os resultados no seguinte formato:

Enter your username:
Enter your hobby:
Hello [username], your hobby is [hobby]!

Por exemplo, se o usuário digitar Alice como nome de usuário e reading como hobby, a saída deve ser:

Enter your username:
Enter your hobby:
Hello Alice, your hobby is reading!

Este desafio testa sua compreensão do uso de scanf com o especificador de formato %s para ler uma entrada de texto, da declaração adequada de arrays de caracteres com tamanho suficiente e da combinação da entrada do usuário com a saída formatada usando printf.

Experimente você mesmo

#include <stdio.h>

int main() {
    // TODO: Declare seus arrays de caracteres aqui
    
    // TODO: Escreva seu código aqui para solicitar e ler a entrada
    
    // TODO: Imprima a mensagem final de saída
    
    return 0;
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de C online