C - Resolvendo problemas com buffers

Publicado por Stanley Sathler em 23/11/2009

[ Hits: 5.374 ]

 


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

GeForce 7300GS no SuSE 10.2

Ambiente gráfico LXQt no Sabayon

Ajustando o brilho da tela pela tecla FN via GRUB

Sobre variáveis globais, locais e estáticas em PHP

Implementando suporte a tradução com GetText + Google Translate API

  

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