C - Resolvendo problemas com buffers

Publicado por Stanley Sathler em 23/11/2009

[ Hits: 5.204 ]

 


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

Proxy Squid e Squidguard com integração full em Domain Controller

Como descobrir a versão (ou release) do seu Ubuntu Linux

Debugando PHP com NetBeans e Xdebug

PEInjector: nova ferramenta para injetar payloads maliciosos em arquivos PE

Disco de inicialização com GRUB

  

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