Problemas com scanf+strings? Aqui a soluçã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");
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");
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");
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");
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

Textos Relacionados:

Deixe um Comentário

3 Comentários.

  1. VonNaturAustreVe via Rec6 - trackback on 6 de Março de 2010 em 17:04
  2. Não estou conseguindo resolver este problema
    Faça um programa que receba uma frase, calcule e mostre a quantidade de vogais da frase digitada.O programa devera contar vogais maiusculas e minisculas.

  3. Busca por vogais maiuscula e minusculas em C. | 0fx66 - pingback on 14 de Maio de 2010 em 01:40

Deixe um Comentário

Trackbacks e Pingbacks:

SEO Powered by Platinum SEO from Techblissonline