domingo, 22 de janeiro de 2017

Entrada de dados - Caracteres em modo gráfico

Já sabemos que é perfeitamente possível escrever en tela
gráfica, usando outras funções que substitui a função
printf e cprintf do modo texto, e estas funções são:
sprintf e outtextxy, que trabalham juntas nesta operação.
Em posts anteriores já venho utilizando estas funções,
Más e a entrada de dados? O que faremos para ler do teclado
já que scanf ou gets só funciona em modo texto?
Está mais que real que esta é uma obrigação nossa
programadores em linguagem c de criar uma função
que atenda estas necessidades.
E como sou bem detalhista, criei este programa
que contém uma função até bem melhor do que se espera.
Neste exemplo, o programa permite que se digite qualquer
coisa do teclado, que ele filtra eliminando todos os
dígitos que foram digitados, e se por acaso só dígitos
forem digitados ele nada mostra.

Veja abaixo duas imagens do programa em execução:



veja abaixo o código do programa:



#include <stdio.h>
#include <graphics.h>
#define ENTER 13
void imp_jan ( int x, int y, int lin, int col, int n ) {
     for ( int i = 0; i <= n; i++ ) {
         line ( x + i, y, x + i, y + lin );
         line ( x + col + i, y, x + col + i, y + lin );
         line ( x, y + i, x + col, y + i );
         line ( x, y + i + lin, x + col + n, y + i + lin );
     }
}
int Format ( char vet [ 50 ] ) {
     int d = 0, i, i_ = 1, k = 0, t;
     char letra = '\0';
     for ( i = 0; i < 50; i++ )
         vet [ i ] = ' ';
     do {
         setcolor ( 14 );
         imp_jan ( 1, 96 * i_ - 97, 285, 643, 20 );
         d++;
         letra = getch ( );
         vet [ k ] = letra;
         k++;
         t = strlen ( vet );
         settextstyle ( 10, 0, 2 );
         setcolor ( 15 );
         outtextxy ( 130, 100, vet );
         if ( letra == ENTER ) {
              break;
         }
     } while ( d < 50 );
     return 0;
}
int main ( ) {
     int i, j, lenv, len_v;
     char Num [ ] = "0123456789";
     initwindow ( 663, 303, "ENTRADA DE DADOS - CARACTERES" );
     char *vet = { 0 };
     vet = ( char* ) malloc ( 50 );
     for ( i = 0; i < 50; i++ )
         vet [ i ] = ' ';
     cleardevice ( );
     settextstyle ( 10, 0, 2 );
     setcolor ( 12 );
     outtextxy ( 130, 40, "ENTRADA DE DADOS - CARACTERES" );
     setcolor ( 9 );
     outtextxy ( 130, 70, "Digite uma frase " );
     setcolor ( 15 );
     //entrada de dados
     Format ( vet );
     len_v = strlen ( vet );
     lenv = strlen ( Num );
     setcolor ( 9 );
     outtextxy ( 130, 130, "Abaixo só os caracteres da frase" );
     vet [ len_v - 1 ] = 0;
     for ( i = 0; i < len_v; i++ ) {
         for ( j = 0; j < lenv; j++ ) {
              if ( vet [ i ] == Num [ j ] ) {
                   vet [ i ] = ' ';
              }
         }
     }
     setcolor ( 12 );
     outtextxy ( 130, 160, vet );
     delay ( 1800 );
     settextstyle ( GOTHIC_FONT, 0, 2 );
     setcolor ( 12 );
     outtextxy ( 160, 190, "Por: " );
     setcolor ( 13 );
     outtextxy ( 240, 190, "Samuel Lima" );
     setcolor ( 15 );
     outtextxy ( 220, 240, "MUITO OBRIGADO" );
     getch ( );
     closegraph ( );
     return ( 0 );
}