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

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

  • 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!