Ir ao conteúdo
  • Cadastre-se

C++ Limitar Numero de Caracteres - C/C++


Tweit Brian

Posts recomendados

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

  • Obrigado 1
Link para o comentário
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

  • Amei 1
Link para o comentário
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!!!

  • Obrigado 1
Link para o comentário
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

  • Curtir 1
Link para o comentário
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);}
  • Obrigado 1
Link para o comentário
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
  • Amei 1
Link para o comentário
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.

  • Curtir 1
Link para o comentário
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

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • 6 anos depois...

Tenho a solução, um pouco atrasada mas caso alguém precise.....Segue código com as inclusões(aqui limito a escrita de apenas 4 caracteres, podendo ser números e letras, com backspace sem bug);

 


 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>//para utilizar strlen()
#include <conio.h>//para utilizar o getch()
#include <ctype.h>//para utilizar o isdigit()
int main(){
    char digitado[50];//armazena o que foi digitado pelo usuário
    char c;//armazena cada caractere digitado pelo usuário
    int i=0;//variável para controlar o índice do vetor de caracteres e o último loop
    printf ("Digite apenas 4 caracteres: ");
    do{
       c=getch();//captura o caractere digitado pelo usuário
       if (isdigit(c)!=0 || isalpha(c)!=0){
          if (i < 4){//se o índice do vetor for menor que 4
              digitado[i] = c;//armazena no vetor de caracteres
              i++;//incrementa o índice do vetor de caracteres
              printf ("%c", c);
          }
       }
       else if(c==8&&i){//se for pressionada a tecla BACKSPACE e houver caracteres já digitados
                digitado[i]='\0';//o índice atual do vetor de caracteres recebe a terminação da string
                i--;//o índice do vetor de caracteres é decrementado
                printf("\b \b");//o caractere digitado é apagado da tela
       }
    }while(c!=13);//o loop vai ser executado até que a tecla pressionada seja o ENTER (código 13 na tabela ASCII)
    digitado[i]='\0';//o índice atual do vetor de caracteres recebe a terminação da string
    printf ("\n\nValor digitado foi: ");
    for (i=0;i<strlen(digitado);i++){
            printf ("%c", digitado[i]);//exibe o caractere no índice atual do vetor
    }
    printf ("\n\n");
    system ("pause");
    return 0;
}

 

 

Espero ter ajudado!!!

  • Curtir 1
  • Amei 1
Link para o comentário
Compartilhar em outros sites

  • 1 ano depois...

Pessoal, vou reviver o post, pois estou com problema de limitação de capitação de caracteres, estou fazendo uma calculadora, e só quero que seja captado um carácter em OP , quando o usuário digita mais de um, ele entra em loop, se digitar 5 carácter, ele imprime 5x a frase.

Temos duas possibilidades, ou limitar a quantidade de carácter, ou arrumar um modo de limpar o buffer da memória, ambos não sei fazer, o código é esse na integra.
utilizei  a IDE online aqui https://www.onlinegdb.com/edit/_pLJ0KSCI

 

#include <iostream>
#include <cmath>
#include <unistd.h>
using namespace std;
int main() {
char op;  // here the problem
double num1, num2, result;
remake:

cout << "Enter the operator + - * / :";
cin >> op;
if (op == '+' || op== '-' || op== '*' || op== '/') {goto calculo;}
else { goto remake; fflush(stdin) ;}

calculo:
cout << "Enter two numbers one by one ";
cin >> num1 >> num2;
operation:
switch (op) {
case '+':
cout << num1 << " + " << num2 << " = " << " + Answer addition = " << num1 + num2;
break;
case '-':
cout << num1 << " - " << num2 << " = " << " - Answer subtration = " << num1 - num2;
break;
case '*':
cout << num1 << " x " << num2 << " = " << "* Answer multiplication = " << num1 * num2;
break;
case '/':
if (num2==0) { cout<< "number invalid to division";} 
else{ result = num1/num2;
cout << num1 << " / " << num2 << " = " << "/ Answer division   ="<< result; }

break;

erro:
cout<< "Operador invalid" << "\n";
goto remake;
}
return 0;
}

 

 

number digits.png

Link para o comentário
Compartilhar em outros sites

6 horas atrás, ederangelo21 disse:

Pessoal, vou reviver o post, pois estou com problema de limitação de capitação de caracteres, estou fazendo uma calculadora, e só quero que seja captado um carácter em OP , quando o usuário digita mais de um, ele entra em loop, se digitar 5 carácter, ele imprime 5x a frase.

 

"captação"

 

Não faça isso. Crie um novo tópico. Tem mais chance de ajudar a outros ao fazer isso.
 

6 horas atrás, ederangelo21 disse:

Temos duas possibilidades, ou limitar a quantidade de carácter, ou arrumar um modo de limpar o buffer da memória, ambos não sei fazer, o código é esse na integra

 

O modo simples de fazer isso no Linux é usar raw io ou no Windows desligar line input e echo. E ler as teclas direto.

 

No linux use
 

        man termios


e vai ter o que precisa: tcgetattr e tcsetattr. No Windows apenas busque pela enorme documentação da console em português

 

No Linux está tudo no terminal mesmo.

 

Ao postar código use a caixa de código, como explicado no primeiro post do forum. Veja a diferença:

 

 

#include <iostream>
#include <cmath>
#include <unistd.h>
using namespace std;
int main() {
char op;  // here the problem
double num1, num2, result;
remake:

cout << "Enter the operator + - * / :";
cin >> op;
if (op == '+' || op== '-' || op== '*' || op== '/') {goto calculo;}
else { goto remake; fflush(stdin) ;}

calculo:
cout << "Enter two numbers one by one ";
cin >> num1 >> num2;
operation:
switch (op) {
case '+':
cout << num1 << " + " << num2 << " = " << " + Answer addition = " << num1 + num2;
break;
case '-':
cout << num1 << " - " << num2 << " = " << " - Answer subtration = " << num1 - num2;
break;
case '*':
cout << num1 << " x " << num2 << " = " << "* Answer multiplication = " << num1 * num2;
break;
case '/':
if (num2==0) { cout<< "number invalid to division";} 
else{ result = num1/num2;
cout << num1 << " / " << num2 << " = " << "/ Answer division   ="<< result; }

break;

erro:
cout<< "Operador invalid" << "\n";
goto remake;
}
return 0;
}

 

 

Não existe C / C++. Existe C existe C++ existe C#. Todas diferentes.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...