[Linguagem C] Utilizando scanf em strings com espaço

Algumas pessoas tem problema com o uso de scanf, principalmente no uso de espaços nas strings, para resolver isso tem um macete muito simples. Digamos o código abaixo:

#include <stdio.h>

int main() {
	char frase[50];
	printf("Digite a uma frase: ");
	scanf("s", &frase);
	printf("A frase digitada foi: %s\n", frase);
	
	return 0;
}

Compile: gcc frase.c -o frase

Resultado:

bash-3.1$ frase
Digite a uma frase: joao caiu feio
A frase digitada foi: joao
bash-3.1$

Para resolve esse problema do scanf não capturando o resto da frase usando o parâmetro %[^\n] ao invés de %s, por exemplo:

#include <stdio.h>

int main(){
	char frase[50];
	printf("Digite a uma frase: ");
	scanf("%[^\n]", frase);
	printf("A frase digitada foi: %s\n", frase);
	
	return 0;
}

Compile: gcc frase2.c -o frase2

Resultado:

bash-3.1$ ex6
Digite a uma frase: joao caiu feio
A frase digitada foi: joao caiu feio
bash-3.1$

Agora a frase foi devidamente capturando, para evitarmos overflows no uso desse parâmetro no scanf, colocando %limite[^\n], sendo limite igual ao valor máximo de caracteres que a função scanf ira armazenar na variável. Ficando desta forma.

#include <stdio.h>

int main() {
	char frase[50];
	printf("Digite a uma frase: ");
	scanf("%49[^\n]", frase);
	printf("A frase digitada foi: %s\n", frase);
	
	return 0;
}

Para limpar o buffer após o uso de scanf com este parâmetro, usamos getchar() após o scanf.

#include <stdio.h>

int main() {
	char frase[50];
	printf("Digite a uma frase: ");
	scanf("%49[^\n]", frase);
        getchar();
	printf("A frase digitada foi: %s\n", frase);
	
	return 0;
}

Espero que a dica sirva para poderem resolver seus problemas o uso de scanf e strings. Bons estudos a todos. Nas referências tem um link com um tabela informando uma serie de parâmetros interessantes para o uso de scanf, no segundo link tem uma artigo do com diversas dicas para printf e scanf a dupla dinâmica.

Referência:

Como usar o scanf() para strings com espaços
Parâmetros interessantes do scanf e do printf em C

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *


3 × cinco =

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>