C - Resolvendo problemas com buffers

Publicado por Stanley Sathler em 23/11/2009

[ Hits: 5.646 ]

 


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

Usando DBDesign no Linux sem instalar

Ativando os links do aMule no Firefox

Entendendo as permissões de arquivos no Linux

Instalação do Metasploit Framework

Acessando AP Wireless Zinwell G200 via Putty

  

Comentários

Nenhum coment�rio foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts