Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Alexandre Caribé

C++ Existe algum comando que limite o número digitado pelo usuário?

Recommended Posts

Olá, estou fazendo um código de votação e no começo dele eu peço para que o usuário digite um número de título de eleitor, o programa é baseado no Sistema eleitoral brasileiro, então é necessário que o usuário digite apenas 12 dígitos (nem mais, nem menos). Existe alguma biblioteca ou função que faça um limite de dados digitados do usuário?

adicionado 5 minutos depois

O código está assim:

#include <cctype>
int main(){
    int v=7,depEstAnaR=0, depEstAnaG=0, depEstAdal=0, vn=0, vb=0, titulo=0, depFedAna=0, depFedPau=0, GovMaia=0, GovGen=0, GovSel=0,SenGut=0, SenFer=0,PresMae=0, PresAnt=0, PresLis=0, Mulher=0, Homem=0;
    setlocale(LC_ALL,"");
    printf("Seja bem vindo, inicie a sua votação!\n Digite seu titulo:");
    scanf("%d", &titulo);
    do{
        printf("\n\nDeputado Estadual:\n 51-Ana Rita Pacheco\n 34-Ana Guilherme\n 11-Adalberto Campos\n 10-Voto Nulo\n 15-Voto Branco");
        printf("\nDigite o número correspondente ao seu voto e aperte ENTER: ");
        scanf("%d",&v);
        switch(v){
            case 0:
                printf("Votação encerrada!");
                break;
            case 51:
                depEstAnaR=depEstAnaR+1;
                Mulher=Mulher+1;
                printf("Ana Rita Pacheco. Voto registrado!");
                break;
            case 34:
                depEstAnaG=depEstAnaG+1;
                Mulher=Mulher+1;
                printf("Ana Guilherme. Voto registrado!");
                break;
            case 11:
                depEstAdal=depEstAdal+1;
                Homem=Homem+1;
                printf("Adalberto Campos. Voto registrado!");
                break;
            case 10:
                vn=vn+1;
                printf("Voto Nulo registrado!");
                break;
            case 15:
                vb=vb+1;
                printf("Voto Branco registrado!");
                break;
            default:
                printf("OPCAO INVALIDA. Digite algo válido!");
                }
    }    while(v!=0 && v!=51 && v!=34 && v!=11 && v!=10 && v!=15);
    do{
        printf("\n\nDeputado Federal:\n56-Ana Vitória\n33-Paulo Guilherme\n20-Voto Nulo\n25-Voto Branco");
        printf("\nDigite o número correspondente ao seu voto e aperte ENTER: ");
        scanf("%d",&v);
        switch(v){
            case 56:
                depFedAna=depFedAna+1;
                Mulher=Mulher+1;
                printf("Ana Vitória. Voto registrado!");
                break;
            case 33:
                depFedPau=depFedPau+1;
                Homem=Homem+1;
                printf("Paulo Guilherme. Voto registrado!");
                break;
            case 20:
                vn=vn+1;
                printf("Voto Nulo registrado!");
                break;
            case 25:
                vb=vb+1;
                printf("Voto Branco registrado!");
            default:
                printf("OPCAO INVALIDA. Digite algo válido!");
                   break;}
        
    }    while(v!=56 && v!=33 && v!=20 && v!=25);
    do{
        printf("\n\nGovernador:\n38-Maia da Ana\n40-Gentil\n18-Selma Silva\n30-Voto Nulo\n35-Voto Branco");
        printf("\nDigite o número correspondente ao seu voto e aperte ENTER: ");
        scanf("%d",&v);
        switch(v){
            case 38:
                GovMaia=GovMaia+1;
                Mulher=Mulher+1;
                printf("Maia da Ana. Voto registrado!");
                break;
            case 40:
                GovGen=GovGen+1;
                Homem=Homem+1;
                printf("Gentil. Voto registrado!");
                break;
            case 18:
                GovSel=GovSel+1;
                Mulher=Mulher+1;
                printf("Selma Silva. Voto registrado!");
                break;
            case 30:
                vn=vn+1;
                printf("Voto Nulo registrado!");
                break;
            case 35:
                vb=vb+1;
                printf("Voto Branco registrado!");
                break;
            default:
                printf("OPCAO INVALIDA. Digite algo válido!");
                break;}
    } while(v!=38 && v!=40 && v!=18 && v!=30 && v!=35);
    do{
        printf("\n\nSenador:\n04-Gutemberg Silva\n67-Fernando Fernandes\n45-Voto Nulo\n50-Voto Branco");
        printf("\nDigite o número correspondente ao seu voto e aperte ENTER: ");
        scanf("%d",&v);
        switch(v){
            case 04:
                SenGut=SenGut+1;
                Homem=Homem+1;
                printf("Gutemberg Silva. Voto registrado!");
                break;
            case 67:
                SenFer=SenFer+1;
                Homem=Homem+1;
                printf("Fernando Fernandes. Voto registrado!");
                break;
            case 45:
                vn=vn+1;
                printf("Voto Nulo registrado!");
                break;
            case 50:
                vb=vb+1;
                printf("Voto Branco registrado!");
                break;
            default:
                printf("OPCAO INVALIDA. Digite algo válido!");
                break;}
    }    while(v!=04 && v!=67 && v!=45 && v!=45 && v!=50);
    do{        
        printf("\n\nPresidente:\n17-Maeli Gente Boa\n22-Antônio do Brasil\n31-Lissandro Progresso\n55-Voto Nulo\n60-Voto Branco");
        printf("\nDigite o número correspondente ao seu voto e aperte ENTER: ");
        scanf("%d",&v);
        switch(v){
            case 17:
                PresMae=PresMae+1;
                Mulher=Mulher+1;
                printf("Maeli Gente Boa. Voto registrado!");
                break;
            case 22:
                PresAnt=PresAnt+1;
                Homem=Homem+1;
                printf("Antônio do Brasil. Voto registrado!");
                break;
            case 31:
                PresLis=PresLis+1;
                Homem=Homem+1;
                printf("Lissandro Progresso. Voto registrado!");
                break;
            case 55:
                vn=vn+1;
                printf("Voto Nulo registrado!");
                break;
            case 60:
                vb=vb+1;
                printf("Voto Branco registrado!");
                break;
            default:
                printf("OPCAO INVALIDA. Digite algo válido!");
                break;}
    } while(v!=17 && v!=22 && v!=31 && v!=55 && v!=60);
    printf("Resultados de Deputado Estadual:\n Ana Rita Pacheco\t% i\n Ana Guilherme\t %i\n Adalberto\t %i\n Votos Nulos\t %i\n Voto Branco\t %i\n",depEstAnaR,depEstAnaG,depEstAdal,vn,vb);
    return 0;
}

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você pode fazer o limite da entrada usando a função fgets, mas não é o método ideal para isso(não vou deixar um exemplo disso, mas se você quiser, eu posto um exemplo).

 

O método correto para esse seu tipo de aplicação seria, limpar os dígitos que ultrapassa o valor máximo.

 

Para fazer isso, você teria que pegar a quantidade de dígitos inserido pelo usuário, para fazer isso de forma simples, você pode usar a classe to_string e usar o método length. Depois você transforma para uma string e remove os caracteres que ultrapassa o limite e converte novamente para um inteiro(usando a função stoi).

 

O exemplo abaixo faz exatamente o que você quer, no caso usei para 3 o limite máximo de digitos.

 

#include <iostream>              // std::cout, std::cin
#include <string>                // std::to_string, std::stoi

#define MAX_NUM                  3

int main()
{
    int numero = 0;

    std::cout << "Insira um numero(ate 3 digitos): ";
    std::cin >> numero;
    
    // Pega a quantidade de números que o inteiro possui usando a classe to_string e armazena no na variável a quantidade
    int qntDigitos = std::to_string(numero).length();
    
    // Verifica se a quantidade números é maior que o limite permitido(definido na constante MAX_NUM)
    if (qntDigitos > MAX_NUM)
    {
        // Converte o inteiro para string
        std::string novonum_str = std::to_string(numero);
    
        // Troca os caracteres dos números que ultrapassam o limite(definido na constante MAX_NUM) pelo caractere que representa o fim de uma string(caractere nulo)
        for (size_t i = MAX_NUM; i < novonum_str.length(); i++)
            novonum_str[i] = '\0';

        // Converte a string para inteiro
        int novonum_int = std::stoi(novonum_str);

        // Mostra na saída o número corrigido
        std::cout << "Numero corrigido: " << novonum_int << std::endl;
    }
    return 0;
}

 

Saída do primeiro teste:

Citação

Insira um numero(ate 3 digitos): 123456
Numero corrigido: 123

 

Saída do segundo teste:

Citação

Insira um numero(ate 3 digitos): 1234
Numero corrigido: 123

 

Saída do terceiro teste:

Citação

Insira um numero(ate 3 digitos): 41203120
Numero corrigido: 412

 

Duas sugestões:

1 - Para esse tipo de aplicação, use como string para ficar mais simples o seu código, como inteiro, se o usuário digitar um número grande, tipo, 123456789101234, vai ocasionar problemas, e um inteiro não pode receber 16 dígitos.

2 - Se você está programando em C++ use funções e recursos da linguagem C++, evite ao máximo usar funções e recursos da linguagem C.

Editado por cyer
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá. Bem interessante seu raciocínio ao converter o numero para uma string e trabalhar com a classe string, mas um ponto q gostaria de frisar é q usando o método "substr" da classe string o código ficaria reduzido d maneira bastante significativa.

Para resolver a questão do usuário digitar um número realmente muito grande, daria p resolver a questão trabalhando com um numero do tipo double, no caso do exemplo abaixo, long double.

Seria algo assim: 

 

#include <iostream>              // cout, cin
#include <string>                // to_string, stoi, substr
using namespace std;


int main()
{
    long double numero;

    cout << "Digite um numero de 3 digitos: ";
    cin >> numero;

    string numeroStr = to_string(numero).substr(0, 3);

    long long int novoNumero = stoi(numeroStr);

    cout << "Novo numero: " << novoNumero << endl;

    return 0;
}

Só um ponto no código q passou despercebido ao postar, a variável novoNumero pode ser só do tipo int que já resolve.

Ficou assim pois estava fazendo testes aqui e esqueci de mudar nessa parte

adicionado 10 minutos depois

Seria mudar nessa linha do código:

 

int novoNumero = stoi(numeroStr);

 

  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 20/04/2018 às 16:46, cyer disse:

2 - Se você está programando em C++ use funções e recursos da linguagem C++, evite ao máximo usar funções e recursos da linguagem C.

Esse é ponto importante para membros e não membros!

Tava triste a respeito disso então protestei nesse tópico: xadrez matriz c movimenta

Editado por AnsiC
melhorar as mensagens
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
50 minutos atrás, AnsiC disse:

Esse é ponto importante para membros e não membros!

Tava triste a respeito disso então protestei nesse tópico: xadrez matriz c movimenta

 

A função "substr" é um método da classe string do C++, talvez você quis se referir aos alteradores de tipo como "long double"

Se é isso basta deixar com int e pronto.

Não entendi ao certo sua colocação ?!

Compartilhar este post


Link para o post
Compartilhar em outros sites
14 minutos atrás, giu_d disse:

Não entendi ao certo sua colocação ?!

Concordei com membro @cyer , quando ele alerta @Alexandre Caribé enquanto o seu erro paradigmático, ou seja confundir mesclar C com C++.

adicionado 5 minutos depois

C é conhecida por muitos como linguagem de programação imperativa (característica de todas as linguagens antigas).

C++ é conhecida por muitos como linguagem de programação orientada a objetos (característica de todas as linguagens novas e produtivas). Mesclar as duas é conhecido por muitos como sendo uma prática grosseira.

 

Ficou claro o quanto concordo com ponto citado.

adicionado 8 minutos depois

Existe poucas pessoas que considera esse ponto irrelevante.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa. Minha intenção foi d apenas apresentar uma função do C++ q é bem útil para o exercício citado, com o objetivo de simplificar o código, já q o C++ oferece vários métodos para classes com a classe string, vector, set, etc...

Normalmente eu estou olhando p códigos q criei há algum tempo atrás e procuro usar uma lógica q deixe o código mais automatizado, reduzindo assim a qtde de código p fazer a mesma coisa.

Se isso é um erro por aqui me desculpa. Sou novo por aqui e estou aqui justamente para aprender

Inclusive aprendi já alguns recursos da classe string q não conhecia, como o método "to_string"

Mas se fazer o q eu fiz foi um erro desculpa, não quis d modo algum atrapalhar nem entristecer alguém.

Longe de mim algo assim. Estou há pouco tempo estudando C e C++ e já vi q tem muitos aqui com muito mais experiência do q eu quero aproveitar isso para aprender ao máximo por aqui

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, giu_d disse:

Desculpa. Minha intenção foi d apenas apresentar uma função do C++ q é bem útil para o exercício citado, com o objetivo de simplificar o código, já q o C++ oferece vários métodos para classes com a classe string, vector, set, etc...

Normalmente eu estou olhando p códigos q criei há algum tempo atrás e procuro usar uma lógica q deixe o código mais automatizado, reduzindo assim a qtde de código p fazer a mesma coisa.

Se isso é um erro por aqui me desculpa. Sou novo por aqui e estou aqui justamente para aprender

Inclusive aprendi já alguns recursos da classe string q não conhecia, como o método "to_string"

Mas se fazer o q eu fiz foi um erro desculpa, não quis d modo algum atrapalhar nem entristecer alguém.

Longe de mim algo assim. Estou há pouco tempo estudando C e C++ e já vi q tem muitos aqui com muito mais experiência do q eu quero aproveitar isso para aprender ao máximo por aqui

 

Agora quem não entendeu fui eu.

 

Isso não tem nada ver com TU e sim com ELE, o autor do tópico que fez C dentro de um arquivo cpp praticamente.

 

Quando eu digo SEU erro estou falando na terceira pessoa do singular, ou seja, o autor do topico. Se tivesse falando de TU teria escrito TEU erro.

 

MEU: Primeira pessoa do Singular, aquela que fala.

TEU: Segunda pessoa do Singular, aquele com quem se fala. 

SEU : Terceira Pessoa no Singular de quem duas pessoas estão falando em geral acompanhada da partícula. Ex: Maria errou, seu erro foi não saber concordância.

 

Kkkk!!!

 

@giu_d Não é um competição, mas se fosse você teria ganhanho por ter explorado os objetos que deixaram o código mais oculto.

Editado por AnsiC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpa. Pensei q você tinha feito o comentário q fez pela questão d eu ter postado o código.

Apenas me confundi. Desculpa

Como já disse e você pode ver muito bem sou inda muito novo por aqui. Você, por exemplo, já é membro aqui desde 2014.

Por ser inda novo por aqui não estou muito familiarizado em como é o funcionamento desse site

Novamente gostaria d me desculpar. Realmente pensei q você estava se referindo a mim. 

Ao q parece eu tava comendo bolha hehe

adicionado 5 minutos depois

Na verdade foi um final d semana muito corrido por aqui, com meus dois sobrinhos passando o final d semana aqui.

Criança você deve saber como é. Realmente, apesar de eu gostar muito deles, acaba mudando bastante a rotina e acaba gerando um certo desgaste a mais

 

adicionado 24 minutos depois

Vou resumir tudo isso dessa forma: Em virtude do desgaste tanto físico como mental em q me encontrava, nem era a hora adequada para eu postar algo por aqui

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@giu_d realmente o código ficou bem mais limpo, não tinha pensado em usar a função substr para limitar, muito boa sua ideia.

Editado por cyer

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






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

×