Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha


Dica

C - Resolvendo problemas com buffers
Linux user
Publicado por Stanley Sathler Pinto em 23/11/2009

Login: stanley_sathler, 6626 pontos
[ Hits: 1783 ]

C - Resolvendo problemas com buffers

Existe um problema bastante comum quando programamos em C, conhecido como buffers. Nesta dica simples mostro como resolvê-los.

Há um tempo atrás, quando lá estava eu estudando C, me deparei com um pequeno erro em meu código. Ele era composto com a seguinte estrutura:

#include <stdio.h>
main(){
char char1, char2
printf("Insira um caractere: ");
scanf("%c", &char1);
printf("Insira outro caractere: ");
scanf("%c", &char2);
printf("Os caracteres inserido foram, respectivamente: '%c' e '%c'\n", char1, char2); }

Logo notei que obtive o seguinte resultado, usando os caracteres 'a' e 'b':

"Os caracteres inseridos foram, respectivamente: 'a' e ''

Aí vem o problema: por quê não tive como resultado o 'b' no segundo caractere, utilizada na variável 'char2'?

O problema é simples de ser resolvido. Após uma pequena busca ao Google aprendi algo sobre Buffer. Logo vi que o problema se apresentava pelo seguinte fato:

Como a variável 'char1' é do tipo caractere (char), o programa só faria a leitura de 1 (um) caractere. Porém, no caso, digitamos 2 (dois). Dois? Como assim?

Simples. Acontece que quando pressionado a tecla <ENTER>, usado para prosseguirmos com nosso algoritmo, o programa o reconhece também como um caractere. Assim, como a variável só lê um caractere, ele vai armazenar a tecla <ENTER> na memória. Dessa forma, ele automaticamente 'joga' a tecla <ENTER> para a segunda variável, char2.

Para resolvermos isso é bem simples. Basta inserirmos um 'espaço', da seguinte forma:

#include <stdio.h>
main(){
char char1, char2
printf("Insira um caractere: ");
scanf("%c", &char1);
printf("Insira outro caractere: ");
scanf(" %c", &char2);
printf("Os caracteres inserido foram, respectivamente: '%c' e '%c'\n", char1, char2); }

Note que quando o programa realiza a segunda leitura, há um espaço antes dos caracteres '%c'. O <espaço> é responsável por remover todos os separadores (no caso, <ENTER>) do Buffer, deixando-o como 'zero'.


Outras dicas deste autor
Nenhuma dica encontrada.

Leitura recomendada
   Dica Linux recomendada Peanut Linux - Guia de instalação
   Dica Linux recomendada Instalando Encore ENL832-TX-ICNT no Debian
   Dica Linux recomendada Instalação de proxy autenticado com Squid
   Dica Linux recomendada Instalando o Samba
   Dica Linux recomendada Derrubando Linux em 10 segundos

Comentários
Nenhum comentário foi encontrado.

Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.