Ir ao conteúdo
  • Cadastre-se

C++ Erro com comando cin


Posts recomendados

E ae galera beleza?

Eu postei uma duvida minha aqui a umas 2 horas atras, só que eu mesmo acabei resolvendo depois, porém agora surgiu uma outra duvida

Eu digito o valor do cpf só que ai depois ele pulava uma parte do codigo, ok... Ai usei cin.clear() e resolveu isso, só que quando fui ver o valor do cpf, o valor estava diferente do que eu tinha colocado, ok.. Então tirei o cin.clear() e usei cin.get() em cima do meu getline, o programa funciona perfeitamente se o meu cpf tiver tamanho inferior a 10, quando o tamanho é superior a 9, entra num loop infinito do meu comando "DO" pulando todos os cin e getline.

 

//arquivo ContaBancaria.cpp
#include "ContaBancaria.h"

ContaBancaria::ContaBancaria()
{

}

void ContaBancaria::setNumeroConta(int numeroConta)
{
    this->numeroConta = numeroConta;
}

void ContaBancaria::setNome(string nome)
{
    this->nome = nome;
}

string ContaBancaria::getNome()
{
    return this->nome;
}

void ContaBancaria::setNascimento(string nascimento)
{
    this->nascimento = nascimento;
}

string ContaBancaria::getNascimento()
{
    return this->nascimento;
}

void ContaBancaria::setCpf(int cpf)
{
    this->cpf = cpf;
}

int ContaBancaria::getCpf()
{
    return this->cpf;
}

void ContaBancaria::setValor(double valor)
{
    this->valor = this->valor + valor;
}

void ContaBancaria::criarConta()
{
    int entradaUsuarioInt;
    string entradaUsuarioString;

    cout << endl << "Para criar uma conta, digite as informações abaixo" << endl;

    cout << "Cpf: ";
    cin >> entradaUsuarioInt;
    this->setCpf(entradaUsuarioInt);


    cout << "Nome: ";
    cin.get();
    getline(cin, entradaUsuarioString);
    this->setNome(entradaUsuarioString);

    cout << "Nascimento: ";
    getline(cin, entradaUsuarioString);
    this->setNascimento(entradaUsuarioString);

    cout << endl << "Conta criada com sucesso!" << endl;
}

void ContaBancaria::showInfo()
{
    cout << "Nome: " << this->getNome() << endl;
    cout << "Nascimento: " << this->getNascimento() << endl;
    cout << "CPF: " << this->getCpf() << endl;
    system("pause");
}

//Arquivo ContaBancaria.h
#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;
class ContaBancaria
{
public:
    ContaBancaria();

    void criarConta();

    void setNumeroConta(int numeroConta);
    int getNumeroConta();

    void setNome(string nome);
    string getNome();

    void setNascimento(string nasicmento);
    string getNascimento();

    void setCpf(int cpf);
    int getCpf();

    void setValor(double valor);
    double getValor();

    void showInfo();

private:
    int numeroConta;
    string nome;
    string nascimento;
    int cpf;
    double valor;

};

//arquivo main.cpp
#include "ContaBancaria.h"

int main()
{
    int escolhaOpcao;
    setlocale(LC_ALL,"Portuguese");

    ContaBancaria *cb = new ContaBancaria();

    do
    {

        cout << "Hello world!" << endl << endl;
        cout << "Escolha uma opção:" << endl;
        cout << "1)Criar conta" << endl;
        cout << "2)Ver conta" << endl;
        cout << "3)Saque" << endl;
        cout << "4)Depósito" << endl;
        cout << "5)Transferir" << endl;
        cout << "6)Sair" << endl;
        cin >> escolhaOpcao;


        switch(escolhaOpcao)
        {
        case 1:
            cb->criarConta();
            break;

        case 2:
            cb->showInfo();
            break;

        case 3:
            break;

        case 4:
            break;

        case 5:
            break;

        case 6:
            break;

        default:
            cout << endl << "Opção inválida" << endl;

        }
    }while(escolhaOpcao!=6);
    return 0;
}




 

Link para o comentário
Compartilhar em outros sites

eu não conhecia esse comando cin.sync()

ele fez a mesma coisa que o cin.get() ou cin.ignore(), no fim não resolveu o problema dos 10 digitos, mas eu sei porque, eu andei pesquisando e uma variavel do tipo int tem um valor maximo que pode receber que é esse abaixo

INT_MAX

Valor máximo para uma variável do tipo int.

2147483647

 

um cpf tem 11 digitos, então o cpf ficava com valor superior a 2147483647(que possui 10 digitos) e por isso dava o erro

galerinha, quem for um programa que peça cpf, utilize o tipo char ou até mesmo o tipo string que irá evitar esse erro

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

bom.. confesso que nem olhei seu código, você falou que "pulava uma parte do código", então dei por sentado que o problema era lixo no buffer e que você ja estava trabalhando com chars, sempre que for trabalhar com números de documentos se recomenda trabalhar com chars não com int, mais ainda assim você pode usar long long int para isso, se gostar de trabalhar com inteiros claro.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

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