Ir ao conteúdo

Posts recomendados

Postado
#include <iostream>

using namespace std;

int main()
{
char V,C;
char opcao;
opcao = 'V','C'; // Variáveis para escolher se V ou C.

char CPF [12];
int cpf [11];

cout << "Digite V para validar, C para calcular os dois ultimos digitos\nou qualquer outra tecla para sair\n";
cin >> opcao;

    switch (opcao)
        {
        case 'V':
            cout << "Digite o CPF para saber se e valido:";
            break;

     


  case 'C': // Calcular os ultimos dois gitios.

            cout << "Digite o os primeiros 9 digitos para calcular os dois ultimos numeros do CPF:";
            cin.getline(CPF,10);
            break;// De finalização do CASE C

                {
            default:
            cout << "opcao invalida!\n";
                }
        }

    return 0;
}

 

Postado

Não está funcionando porque você não está limpando o buffer do teclado.

 

Apenas adicione as 2 linhas abaixo dos cin para limpar o buffer:

cin.clear();
cin.ignore(INT_MAX,'\n');

 

Existe varias forma de limpar o buffer do teclado, essa é a unica que me recordo no momento.

  • Amei 1
Postado

Se você esta programando em C++, tente fazer as coisas sem usar a sintaxe do C..

 

#include<iostream>
#include<string>
using namespace std;

int main()
{
    cout << "Digite o os primeiros 9 digitos para calcular os dois ultimos numeros do CPF:\n";

    string CPF = "???";
    getline(cin,CPF);

    cout << "CPF:  " << CPF << '\n';
}

 

  • Curtir 1
Postado
// Acontece que depois q eu inseri os comandos para calcular os 2 ultimos digitos do CPF 
// Aparece uma sequencia enorme de numeros, vocês sabem me dizer onde está o ERRO?
case 'C': // Calcular os ultimos dois digitios.

            cout << "Digite o os primeiros 9 digitos para calcular os dois ultimos numeros do CPF:"<<endl;
            cin.getline(CPF,10);
            cin.clear();
            cin.ignore(INT_MAX,'\n');
            //abaixo dessa parte são os comandos para calcular os dois ultimos digitos.

             do
                {
            SOMA = SOMA + cpf[10-n]*n;
            n--;
                }
            while (n > 1);

        R = SOMA%11;


            if (R < 2)
                {
                cpf[9] = 0;
                }
            else
                {
                cpf[9] = 11 - R;
                }
            i = 0;

            //calcula o segundo digito

        n = 11;
        SOMA = 0;
        R=0;
        do
            {
                SOMA = SOMA + cpf[11-n]*n;
                n--;
            }
            while (n > 1);

        R = SOMA%11;

        if (R < 2)
            {
                cpf[10] = 0;
            }
            else
            {
                cpf[10] = 11 - R;
            }
            i = 0;
            do
            {
                cout << cpf[i];
                i++;
            }
            while(i < 11);






            break;// De finalização do CASE C

                {
            default:
            cout << "opcao invalida!\n";
                }
        }





    return 0;
}

 

Postado
1 hora atrás, EIGHT RxXD disse:

// Acontece que depois q eu inseri os comandos para calcular os 2 ultimos digitos do CPF 
// Aparece uma sequencia enorme de numeros, vocês sabem me dizer onde está o ERRO?
case 'C': // Calcular os ultimos dois digitios.

            cout << "Digite o os primeiros 9 digitos para calcular os dois ultimos numeros do CPF:"<<endl;
            cin.getline(CPF,10);
            cin.clear();
            cin.ignore(INT_MAX,'\n');
            //abaixo dessa parte são os comandos para calcular os dois ultimos digitos.

             do
                {
            SOMA = SOMA + cpf[10-n]*n;
            n--;
                }
            while (n > 1);

        R = SOMA%11;


            if (R < 2)
                {
                cpf[9] = 0;
                }
            else
                {
                cpf[9] = 11 - R;
                }
            i = 0;

            //calcula o segundo digito

        n = 11;
        SOMA = 0;
        R=0;
        do
            {
                SOMA = SOMA + cpf[11-n]*n;
                n--;
            }
            while (n > 1);

        R = SOMA%11;

        if (R < 2)
            {
                cpf[10] = 0;
            }
            else
            {
                cpf[10] = 11 - R;
            }
            i = 0;
            do
            {
                cout << cpf[i];
                i++;
            }
            while(i < 11);






            break;// De finalização do CASE C

                {
            default:
            cout << "opcao invalida!\n";
                }
        }





    return 0;
}

 

Poste o código completo, assim fica bem difícil de saber onde está o erro, o que exatamente é o n e com qual valor ele foi inicializado?

  • Curtir 1
Postado
#include <iostream>

using namespace std;

int main()
{
char V,C;
char opcao;
opcao = 'V','C'; // Variáveis para escolher se V ou C.

char CPF [12];
int cpf [11];
bool ERRO = false; // para calcular os dois ultimos numeros do CPF.

int i,soma;
    i=0;
    soma = 0;

//calculo do primeiro digito
int n = 10;
int SOMA = 0;
int R=0;




cout << "Digite V para validar, C para calcular os dois ultimos digitos\nou qualquer outra tecla para sair\n";
cin >> opcao;

    switch (opcao)
        {
        case 'V':
            cout << "Digite o CPF para saber se e valido:"<<endl;
            cin.getline(CPF,12);
            cin.clear();
            cin.ignore(INT_MAX,'\n');



            break;



        case 'C': // Calcular os ultimos dois digitios.

            cout << "Digite o os primeiros 9 digitos para calcular os dois ultimos numeros do CPF:"<<endl;
            cin.getline(CPF,10);
            cin.clear();
            cin.ignore(INT_MAX,'\n');
            //abaixo dessa parte são os comandos para calcular os dois ultimos digitos.

             do
                {
            SOMA = SOMA + cpf[10-n]*n;
            n--;
                }
            while (n > 1);

        R = SOMA%11;


            if (R < 2)
                {
                cpf[9] = 0;
                }
            else
                {
                cpf[9] = 11 - R;
                }
            i = 0;

            //calcula o segundo digito

        n = 11;
        SOMA = 0;
        R=0;
        do
            {
                SOMA = SOMA + cpf[11-n]*n;
                n--;
            }
            while (n > 1);

        R = SOMA%11;

        if (R < 2)
            {
                cpf[10] = 0;
            }
            else
            {
                cpf[10] = 11 - R;
            }
            i = 0;
            do
            {
                cout << cpf[i];
                i++;
            }
            while(i < 11);






            break;// De finalização do CASE C

                {
            default:
            cout << "opcao invalida!\n";
                }
        }





    return 0;
}

@cyer está aqui o código completo!

Postado

@EIGHT RxXD poderia me dizer como você quer fazer para calcular os 2 últimos dígitos? Pelo código ficou bem confuso esse seu calculo.

 

PS: Eu testei seu código aqui e não gerou números grandes, gerou apenas zeros em todos os dígitos.

 

Umas sugestões:
1 - Quando declarar uma variável sempre inicialize ela com algum valor, por exemplo 0, assim vai evitar que ela seja inicializada com lixo de memória, essa sugestão em alguns raros casos não é para ser aplicada, por exemplo, se você está criando uma aplicação que precisa do máximo de performance possível e que até um ganho de poucos nanosegundos já seja grande coisa na sua aplicação, ai nesse caso você deve ignorar essa sugestão.

 

2 - Procure deixa o seu código mais legível, por exemplo, no caso das variáveis defina o nome dela como o que exatamente ela vai fazer ou receber(nome de pessoas e e idades nesse exemplo), por exemplo: 

 

// Forma que dificulta a legibilidade do código:
char np[300];
int i;
// Forma correta(ainda faltou inicializar com 0)
char nome_pessoa[300];
int idade;

3 - Como já foi dito acima, se você está programando em C++, evite usar as sintaxes do C, como por exemplo:

char CPF[12];
int cpf[11];

Prefira usar:

string CPF; // Não é necessario inicializar com algum valor, já que é uma classe e com certeza tem um construtor dentro dela que já inicializa os valores com 0.
vector<int> cpf; // Não é necessario inicializar com algum valor, já que é uma classe e com certeza tem um construtor dentro dela que já inicializa os valores com 0.

Essa sugestão assim como a primeira, não se aplica se você estiver desenvolvendo uma aplicação que necessite do máximo de desempenho possível, mas fique sabendo que a diferença no desempenho da string e do vector do C++ para o da linguagem C não é grande coisa, a diferença é de uns milissegundos a mais na velocidade de um para o outro, o que em 99% dos casos não causa perda de desempenho na aplicação.

  • Curtir 1
Postado
16 horas atrás, EIGHT RxXD disse:

@cyer Muito obrigado mano, consegui!! 

 

Acho que você devia dizer onde estava o problema e o que fez para solucionar, para ajudar alguém que tenha um problema parecido com o seu.

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!