Ir ao conteúdo
  • Cadastre-se
Tweit Brian

Limitar Numero de Caracteres - C/C++

Recommended Posts

Olá gente, eu gostaria de como limitar o numero de caracteres no C ou C++, mas tipo, quero que na hora, assim que o usuario digitar uma letra logo nao deixa a letra aparecer, por exemplo, com um limite de 4 letras, ai quando chegar em quatro letras digitadas qualquer outra letra digitada nao irá aparecer, mas se o cara tentar apagar ai apaga e fica 3 letras digitadas, eu ja procurei mt isso, e eu realmente preciso disso, alguem me ajuda ae pfv!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

uma pergunta que não quer calar

digitar onde?

 

considerando que sua pergunta é em cima da logica

bem eu faria um contador de caractere em loop de entrada

quando chegar ao limite para de aceitar entradas

 

ou ao se pegar apenas as 4 1ª letras

if(palavraDigitada[4]!='\0') {for(l=0;l<=3;l++) {palavra[l]=palavraDigitada[l] }}

 

mas com certeza deve ter maneira de fazer o que você quer

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

cara eu fiz uma função pra tentar fazer o que eu quero mas ta mt ruim e o backspace ta com bug....você sabe um modo melhor de fazer isso?

 

 

int characters_writings=0;
 
Recarrega_Caracteres_Letras:
 
int for_use;
 
int for_use2;
 
char write_letter[limit_charactersL];
 
for(for_use=0;for_use<limit_charactersL;for_use++){
 
gotoxy(xcoord,ycoord);
 
 for(for_use2=0;for_use2<characters_writings;for_use2++){
 
    cout << write_letter[for_use2];
 
 }
 
Recarrega_Caractere_Letra:
 
write_letter[for_use] = getch();
 
  characters_writings++;
 
 if(write_letter[for_use] == 8){
 
    if(for_use == 0){
 
     characters_writings++;
 
    }
 
    else if(for_use > 0){
 
     characters_writings--;
 
     for_use--;
 
     write_letter[for_use--] = ' ';
 
 
 
    int xcoord2 = characters_writings-xcoord;
 
    xcoord2--;
 
    gotoxy(xcoord2--,ycoord);
 
     cout << " ";
 
 
 
    }
 
 }
 
 
 
}
 
goto Recarrega_Caractere_Letra;

ah e e isso fica entre void void Letter(int limit_charactersL=10,int xcoord=1,int ycoord=1)

 

e você precisa baixar a biblioteca conio.c

preciso muito saber como se faz isso!!! já procurei em muitos sites mas nao consegui  :(

Pfv alguem me ajuda ;-; já procurei tanto isso...

========================================================================================

 

Ainda estou esperando respostas!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu ainda nem comecei a programar,

 

e ainda estou me acomodando na linguagem e meu nivel de conhecimento é ZERO,

então de certa forma somente posso te ajudar na logica empregada se eu souber o funcionamento de cada coisa usada

 

bem, eu adoro variaveis  curtas

mas isso que você fez é para confudir a visão né

for(for_use2=0;for_use2<characters_writings;for_use2++)

parece até que tem um for dentro do outro

for( use2 = 0 ; use2 < characters_writings ; use2++)
int characters_writings=0; Recarrega_Caracteres_Letras://<---o que isso faz e como ???? int for_use; int for_use2; char write_letter[limit_charactersL]; for(for_use=0;for_use<limit_charactersL;for_use++) { gotoxy(xcoord,ycoord);                //<<<-- o que esse gotoxy faz?  for( for_use2 = 0; for_use2 < characters_writings ; for_use2++ )//<<--quem definiu um valor diferente de 0 em characters_writings

bem,l eu tenho mais duvidas que você :P é melhor esperar alguem que saiba do assunto :unsure: desculpa aí

 

tá peguei,

no caso se a contagem de caracter for maio que o limite o cursor é reposicionado com gotoxy  para o limite especificado

 

mas eu ainda estou tentando consetar meu ide então nem posso testar o funcionamento

Compartilhar este post


Link para o post
Compartilhar em outros sites

talvez possa ajudar em algo

http://www.vivaolinux.com.br/artigo/Parametros-interessantes-do-scanf-e-do-printf-em-C?pagina=2

 

dei uma pesquisada sobre captura do teclado

no caso ficar varrendo o teclado e atualizar a tela se chegar ao limite parar

 

 

o gotoxy tem como implementar sem o conio

#include <windows.h>#include <stdio.h>void gotoxy(int coluna, int linha){        COORD point;        point.X = coluna; point.Y = linha;        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), point);}

Compartilhar este post


Link para o post
Compartilhar em outros sites
#include <iostream>#include <windows.h>using namespace std;void gotoxy ( int x, int y );char getch ( void );int main () {    bool sair = false;    char  ch;    int contador = 0;    int MAX_DIGITOS = 4 ;        while ( !sair ) {        ch = getch();                if ( ch == 27 )            break;        else            if ( ( ch >= 65 && ch <= 90 ) || ( ch >= 97 && ch <= 122 ) ) {                if ( contador < MAX_DIGITOS ) {                    putchar(ch);                    contador++;                }            }            if ( ch == 8 ){                printf("\b");                printf(" ");                printf("\b");                contador--;            }    }        cin.ignore();    return 0;}void gotoxy ( int x, int y ) {    HANDLE hcon;    hcon = GetStdHandle ( STD_OUTPUT_HANDLE );    COORD dwPos;    dwPos.X = x;    dwPos.Y = y;    SetConsoleCursorPosition ( hcon, dwPos );}char getch(void){    HANDLE hmanejador;    char caracter;    DWORD var;    DWORD modo;    if((hmanejador = GetStdHandle(STD_INPUT_HANDLE)) == INVALID_HANDLE_VALUE){        //error(__LINE__);    }    if(GetConsoleMode(hmanejador, &modo) == 0){        //error(__LINE__);    }    if(SetConsoleMode(hmanejador, ENABLE_MOUSE_INPUT | ENABLE_PROCESSED_INPUT) == 0){        //error(__LINE__);    }    if(ReadConsole(hmanejador, &caracter, 1, &var, NULL) == 0){        //error(__LINE__);    }    if(SetConsoleMode(hmanejador, modo) == 0){        //error(__LINE__);    }    return caracter;} 

Ja tem o getch e o gotoxy.. Mas não estou usando  o gotoxy.

Prove fazer o include de conio.h, pode ser que já tenha ele no seu PC. si nao prove incluir windows.h.

 

Conio pertence a compiladores borland, já não se usa isso muito na atualidade. Existe uma biblioteca chamada conio2.1 que você pode encontrar ela por internet, eu te deixo a minha aqui adjunta, ela esta mais preparada para compiladores atuais, foi modificada e corrigida para trabalhar melhor com mingw por exemplo.

 

Dentro vem as instruções e 2 arquivos de prova, um para C e outro para C++, para incluir ela no seu programa coloque conio.c e conio2.h junto com seu código e depois faça o include #include"conio2.h".

conio21.zip

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara deu certo aqui mas nao da pra digitar os números e também quando voce da muitos backspace o numero limite de caracteres possiveis para digitar aumenta, será que tem como resolver isso se for possível?


e também tem como escrever so int é porque eu to pensando em fazer alem de um programa que de pra escrever o nome com limite também dê pra limitar o numero de caracteres de algum número.

Compartilhar este post


Link para o post
Compartilhar em outros sites
cara deu certo aqui mas nao da pra digitar os números e também quando voce da muitos backspace o numero limite de caracteres possiveis para digitar aumenta, será que tem como resolver isso se for possível?

 

você não falou nada de números, sim de letras. Vou te passar um código que serve para tomar nota do numero de cada tecla, ou seja, você executa ele, e conforme a tecla que ele te vai dizer, você no seu programa faça if ( ch == numeroTecla ){ /*faça algo*/ }. Ok?

 

 

e também tem como escrever so int é porque eu to pensando em fazer alem de um programa que de pra escrever o nome com limite também dê pra limitar o numero de caracteres de algum número.

 

tem como fazer o que você quiser, como falei você precisa saber o numero de da tecla, então você usa esse rango de teclas para fazer alguma coisa.

 

Aqui o código para saber o numero de teclas.

#include <stdio.h>#include <conio.h>//mayusculas de 65 a 90//minusculas de 97 a 122//numeros de 48 a 57//back 8//enter 13int main () {    int ch;        while ( ( ch = _getch() ) != 27 ) { /* 27 = Esc key */            printf ( "%d", ch );                if ( ch == 0 || ch == 224 )            printf ( ", %d", _getch () );                    printf ( "\n" );    }        printf ( "ESC %d\n", ch );        return ( 0 );}

Agora tem uma coisa... algumas teclas tem 2 códigos. Por exemplo as do teclado numérico, si pulsamos a tecla bloqNum alternamos entre flechas direcionais ou teclado numérico. Pois bem... Si eu pulsar a tecla um com o bloqNum desativado, vai sair o código 0 seguido de uma virgula e um numero 79. tipo "0, 79". quando estiver ativado o BloqNum, somente vai sair um 49, isso por que as teclas tem 2 funções, então quando sair esse 0 seguido de 79, na tecla 1, você sabe que esta ativado o bloqNum, nesse caso se trata das teclas direcionais, porém si sair o numero 49 na tecla1 é porque esta desativado, falou?

Igualmente as teclas direcionais tem 2 códigos. Para que ter 2 códigos? pois por exempli você tem um if para teclado, um para as flechas direcionais outro para teclado numérico, e dentro de cada um desses if você faz a comparação para saber qual delas foi pulsada. Vamos a ver exemplo. Como falei no teclado numérico com a tecla 1 tem 2 funções, todas elas(as de números) tem 2 funções, direcional(sai o zero adiante) e não direcional(não sai zero). As setas que estão entre o teclado normal e o numérico também dão 2 números, da o 224 que indica que são as setas e  72 acima, 80 abaixo, 75esquerda e 77 direita. Algo como:

224, 72 Acima

224, 80 Abaixo

224, 75 Esquerda

224, 77 Direita

 

Então podemos fazer algo como:

#include <stdio.h>#include <conio.h>int main () {    int ch;    printf("Utilize as teclas direcionais de ambos teclados(Numerico e normal). Esc para sair\n\n");    while ( ( ch = _getch() ) != 27 ) { /* 27 = Esc key */            if ( ch == 0){            ch = _getch();            printf("Direcional Numerico: ");            if ( ch == 72 ){                printf( "Acima" );            }            if ( ch == 80 ){                printf( "Abaixo" );            }            if ( ch == 75 ){                printf( "Esquerda" );            }            if ( ch == 77 ){                printf( "Direita" );            }            printf("\n");                      }        if ( ch == 224 ){            ch = _getch();            printf("Direcional: ");            if ( ch == 72 ){                printf( "Acima" );            }            if ( ch == 80 ){                printf( "Abaixo" );            }            if ( ch == 75 ){                printf( "Esquerda" );            }            if ( ch == 77 ){                printf( "Direita" );            }            printf("\n");                    }    }            return ( 0 );}

Serve muito para criar jogos de console =). é uma especie de controle de eventos básica.

 

você chama getch uma vez para saber o tipo de tecla, direcional, numérica, F1, F2, F3.... Logo você chama outra vez o getch para saber qual é a tecla. ok?

 

Então você só precisa saber o que você quer fazer e o numero da tecla que te da aquele código que te passei antes.

Sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

lol, valeu, mas eu queria mesmo não era o ascii das teclas


eu queria um neogcio bem certinho sabe, porque eu coloquei o enter para sair do looping e precisa apertar duas vezes, queria um negocio que fosse fácil de se usar =/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não existe nada parecido ao que você quer. você pode tentar usar Ncurses ou PDCurses que gera uma especie de janela gráfica meia primitiva, mas ai já não posso lhe ajudar mais. >_<

 

Sorte

Compartilhar este post


Link para o post
Compartilhar em outros sites

ok, valeu, obrigado por me ajudar  :)

 

===================================================================================/

 

AINDA ESTOU ESPERANDO RESPOSTAS!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×