Menu
Coddy logo textTech

Entrada de Strings com scanf

Parte da seção Logic & Flow 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 como obter entrada de string dos usuários. A função scanf pode ler strings usando o especificador de formato %s, mas ela vem com 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 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 nova linha). Isso significa que se um usuário digitar "Hello World", o scanf capturará apenas "Hello" e deixará "World" no buffer de entrada.

Outra preocupação séria é que o scanf não verifica se a entrada cabe no seu array. Se alguém inserir uma palavra maior do que o seu array pode conter, isso causará um buffer overflow, potencialmente travando seu programa ou criando 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 únicas, que é exatamente o que você praticará no próximo desafio.

challenge icon

Desafio

Fácil

Escreva um programa em C que demonstre a leitura de entrada de string do usuário usando scanf e a exiba de volta. 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 ao usuário 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 ao usuário a mensagem "Enter your hobby:"
  6. Usar scanf com o especificador de formato %s para ler o hobby no array hobby
  7. Imprimir ambas as strings usando printf no formato exato mostrado abaixo

A entrada será fornecida como duas palavras únicas 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 inserir "Alice" como o nome de usuário e "reading" como o 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 entrada de string, a declaração adequada de array de caracteres com tamanho suficiente e a combinação de entrada do usuário com saída formatada usando printf.

Folha de consulta

Para ler a entrada de strings dos usuários, use scanf com o especificador de formato %s:

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

Limitações importantes do scanf("%s", ...):

  • Interrompe a leitura em qualquer caractere de espaço em branco (espaço, tabulação, nova linha)
  • Captura apenas palavras únicas - "Hello World" torna-se apenas "Hello"
  • Sem proteção contra estouro de buffer (buffer overflow) - certifique-se de que seu array seja grande o suficiente
  • Não use o operador & com nomes de arrays (eles já são endereços)

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 de saída final
    
    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 Logic & Flow