Ir ao conteúdo

Posts recomendados

Postado

Estou com um problema no meu código, quando eu cadastro várias pessoas ele não mostra alguns dados. Ex.: o campo código fica em branco, ou outro campo qualquer.

#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

class pessoa{

private:
    char nome[30],email[50],telefone[10],rg[10],codigo[10];

public:
    void cadastrar(int i);
    void consultar(int i);
};

pessoa* p;

void pessoa :: cadastrar(int i){
    cout << "Digite o Codigo: ";
    cin >> p[i].codigo;

    cout << "Digite o Nome: ";
    cin >> p[i].nome;

    cout << "Digite o Email: ";
    cin >> p[i].email;

    cout << "Digite o Telefone: ";
    cin >> p[i].telefone;

    cout << "Digite o RG: ";
    cin >> p[i].rg;
};

void pessoa :: consultar(int i){
    cout << "Codigo: " << p[i].codigo;

    cout << " Nome: " << p[i].nome;

    cout << " Email: " << p[i].email;

    cout << " Telefone: " << p[i].telefone;

    cout << " RG: " << p[i].rg << endl;
};

int main(){

   int y=0,opc,new_opc;
   p = new pessoa[y];

do{

    cout << "\n----- MENU -----" << endl;
    cout << "1- Cadastrar" << endl;
    cout << "2- Consultar" << endl;
    cout << "3- Alterar" << endl;
    cout << "0- Sair" << endl;
    cout << "----------------" << endl;
    cout << "Informe a Opcao: ";
    cin >> opc;

    switch (opc){
        case 1:
            system("cls");
            do{
                p[y].cadastrar(y);
                new_opc=0;
                cout << "Deseja continuar cadastrando? 1-Sim / 2-Nao " << endl;
                cin >> new_opc;
                y++;

	     }while(new_opc==1);
        system("cls");
        break;

        case 2:
            system("cls");
            for(int i=0;i<y;i++){
                p[i].consultar(i);
            }
        break;

        default:
            exit(0);
    }

}while(opc!=0);

    delete[] p;

    return 0;
}

 

Postado
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

class pessoa{

private:
    char nome[30],email[50],telefone[10],rg[10],codigo[10];

public:
    void cadastrar();
    void consultar();
};

pessoa **p;//*p[]

void pessoa :: cadastrar(){
    cout << "Digite o Codigo: ";
    cin >> codigo;

    cout << "Digite o Nome: ";
    cin >> nome;

    cout << "Digite o Email: ";
    cin >> email;

    cout << "Digite o Telefone: ";
    cin >> telefone;

    cout << "Digite o RG: ";
    cin >> rg;
};

void pessoa :: consultar(){
    cout << "Codigo: " << codigo;

    cout << " Nome: " << nome;

    cout << " Email: " << email;

    cout << " Telefone: " << telefone;

    cout << " RG: " << rg << endl;
};

int main(){

   int y=0,opc,new_opc;
   p = (pessoa **)malloc(sizeof(pessoa**));

do{

    cout << "\n----- MENU -----" << endl;
    cout << "1- Cadastrar" << endl;
    cout << "2- Consultar" << endl;
    cout << "3- Alterar" << endl;
    cout << "0- Sair" << endl;
    cout << "----------------" << endl;
    cout << "Informe a Opcao: ";
    cin >> opc;

    switch (opc){
        case 1:
            system("cls");
            do{
                p[y] = new pessoa;
                p[y]->cadastrar();
                new_opc=0;
                cout << "Deseja continuar cadastrando? 1-Sim / 2-Nao " << endl;
                cin >> new_opc;
                y++;

	     }while(new_opc==1);
        system("cls");
        break;

        case 2:
            system("cls");
            for(int i=0;i<y;i++){
                p[i]->consultar();
            }
        break;

        default:
            exit(0);
    }

}while(opc!=0);

    delete[] p;

    return 0;
}

 

Postado
#include <iostream>
#include <stdlib.h>
#include <stdio.h>

using namespace std;

class pessoa{

private:
    char nome[30],email[50],telefone[10],rg[10],codigo[10];

public:
    void cadastrar();
    void consultar();
};

pessoa **p;//*p[]

void pessoa :: cadastrar(){
    cout << "Digite o Codigo: ";
    cin >> codigo;
    cin.sync();

    cout << "Digite o Nome: ";
    cin >> nome;
    cin.sync();

    cout << "Digite o Email: ";
    cin >> email;
    cin.sync();

    cout << "Digite o Telefone: ";
    cin >> telefone;
    cin.sync();

    cout << "Digite o RG: ";
    cin >> rg;
    cin.sync();
};

void pessoa :: consultar(){
    cout << "Codigo: " << codigo;

    cout << " Nome: " << nome;

    cout << " Email: " << email;

    cout << " Telefone: " << telefone;

    cout << " RG: " << rg << endl;
};

int main(){

   int y=0,opc,new_opc;
   p = (pessoa **)malloc(sizeof(pessoa**));

do{

    cout << "\n----- MENU -----" << endl;
    cout << "1- Cadastrar" << endl;
    cout << "2- Consultar" << endl;
    cout << "3- Alterar" << endl;
    cout << "0- Sair" << endl;
    cout << "----------------" << endl;
    cout << "Informe a Opcao: ";
    cin >> opc;
    cin.sync();

    switch (opc){
        case 1:
            system("cls");
            do{
                p[y] = new pessoa;
                p[y]->cadastrar();
                new_opc=0;
                cout << "Deseja continuar cadastrando? 1-Sim / 2-Nao " << endl;
                cin >> new_opc;
                cin.sync();
                y++;

	     }while(new_opc==1);
        system("cls");
        break;

        case 2:
            system("cls");
            for(int i=0;i<y;i++){
                p[i]->consultar();
            }
        break;

        default:
            exit(0);
    }

}while(opc!=0);

    delete[] p;

    return 0;
}

 

Postado

Caso queira usar menos memória:

#include <string.h>

class pessoa {

private:
    char *nome, *email, *telefone, *rg, *codigo;//Nao alocado
    
public:
    void cadastrar();
    void consultar();
};

pessoa **p;

//Aloca/copia string
char* novastr(char *string,char *destino){
    destino = new char[strlen(string)];
    strcpy(destino,string);
    return destino;
}

void pessoa :: cadastrar() {
	char *buffer = new char[512]; 
	
	
    cout << "Digite o Codigo: ";
    cin.getline(buffer,512);
    codigo = novastr(buffer,codigo);//obter codigo de buffer
    
    cout << "Digite o Nome: ";
    cin.getline(buffer,512);
    nome = novastr(buffer,nome);
    
    cout << "Digite o Email: ";
    cin.getline(buffer,512);
    email = novastr(buffer,email);
    
    cout << "Digite o Telefone: ";
    cin.getline(buffer,512);
    telefone = novastr(buffer,telefone);
    
    cout << "Digite o RG: ";
    cin.getline(buffer,512);
    rg = novastr(buffer,rg);
    
    free(buffer);
};

 

Postado

Valeu pela ajuda tambem freak no causo se eu for criar a função alterar, o exercicio pede pra fazer uma busca por nome e verificar se ele existe ou não . Se eu fizer um for pra percorrer o ponteiro e comparar usando a strcmp será que da certo ?

Postado

Grabriel...

 

Recomendo não usar char[] para guardar os valores e sim strings, com strings esses erros de memória não serão problemas, outro fato é que você já está usando c++.

Se você usar string poderá usar o método Compare() da própria biblioteca string.

 

 

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!