C - Resolvendo problemas com buffers

Publicado por Stanley Sathler em 23/11/2009

[ Hits: 4.882 ]

 


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

Servidor DHCP automático com limitação por MAC no Debian 2.6

Manual de instalação e configuração do Cacti no Fedora 8

Instalando kernel 2.6.38.4 no Slackware 13.37

Problemas com campos maiores que 300MB no pg_dump

Linux no Dell Optiplex 320

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário