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:  
Entre para seguir isso  
EIGHT RxXD

C++ porque o comando cin.getline(CPF,10); // Não está funcionando no programa

Recommended Posts

#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;
}

 

Editado por Simon Viegas
Inserir tag CODE

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Editado por cyer
  • Curtir 1
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

pode usar o cin.sync() depois de cada leitura.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites
// 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;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
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

Compartilhar este post


Link para o post
Compartilhar em outros sites
#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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Editado por cyer
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

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

Entre para seguir isso  





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

×