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.
Desafio
FácilEscreva um programa em C que demonstre como ler uma entrada de texto do usuário usando scanf e exibi-la novamente. Seu programa deve:
- Declarar um array de caracteres chamado
usernamecom 30 elementos para armazenar a entrada do usuário - Declarar um array de caracteres chamado
hobbycom 25 elementos para armazenar outra entrada - Usar
printfpara solicitar que o usuário informe a mensagemEnter your username: - Usar
scanfcom o especificador de formato%spara ler o nome de usuário no arrayusername - Usar
printfpara solicitar que o usuário informe a mensagemEnter your hobby: - Usar
scanfcom o especificador de formato%spara ler o hobby no arrayhobby - Imprimir as duas strings usando
printfexatamente 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;
}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
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um ContatoPratique por conta própria: Compilador de C online