Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
Postado

 

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
Postado

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
Postado

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
Postado

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
Postado

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 =/

  • Amei 1
  • 6 anos depois...
Postado

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
  • 1 ano depois...
Postado

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

Postado
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

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

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!