Médio C
Lendo nome com espaços usando fgets
Enunciado
Escreva um programa que leia o nome completo do usuário (com espaços) e o exiba. Use fgets para a leitura e remova o caractere de nova linha antes de exibir.
Requisitos
- Usar
fgetspara ler o nome. - Remover o
\ndo final da string, se presente. - Exibir o nome em uma linha:
Nome: <nome>.
Código inicial
#include <stdio.h>
#include <string.h>
int main(void) {
char nome[100];
// Seu código aqui
return 0;
}
Saída esperada
Digite seu nome completo: Maria da Silva
Nome: Maria da Silva
Ver dica
Use fgets(nome, sizeof(nome), stdin); e depois procure o \n com strcspn ou um laço.
Mostrar solução
#include <stdio.h>
#include <string.h>
int main(void) {
char nome[100];
printf("Digite seu nome completo: ");
fgets(nome, sizeof(nome), stdin); // lê a linha inteira, incluindo espaços
// Remove o '\n' do final, se existir
nome[strcspn(nome, "\n")] = '\0';
printf("Nome: %s\n", nome);
return 0;
}
Passo a passo
- Incluímos
<stdio.h>paraprintfefgets, e<string.h>parastrcspn. - Declaramos
nomecomo um array decharcom tamanho 100. fgets(nome, sizeof(nome), stdin)lê até 99 caracteres ou até encontrar\n, armazenando emnome.nome[strcspn(nome, "\n")] = '\0';encontra a posição do\ne a substitui por\0, terminando a string antes da quebra de linha.printfexibe o nome sem o\nextra.
Por que funciona
fgets lê a linha inteira, incluindo espaços, e armazena o \n se houver espaço. Removê-lo evita que a saída tenha uma quebra de linha adicional. strcspn retorna o índice do primeiro caractere da lista "\n", ou o comprimento da string se não encontrar.
Erros comuns
- Não remover o
\n: a saída fica com uma linha em branco extra. - Usar
scanf("%s", nome): lê apenas até o primeiro espaço, truncando o nome. - Esquecer de incluir
<string.h>: o compilador pode não reconhecerstrcspn.
Outra forma de resolver
Pode-se usar um laço for para percorrer a string e substituir o \n por \0, mas strcspn é mais conciso e idiomático.
Saída esperada
Digite seu nome completo: Maria da Silva
Nome: Maria da Silva