Olá, estou aprendendo a programar em c++, e devo admitir não é fácil, e tive a ideia de desenvolver um pequeno projete de uma AGENDA.
O problema consiste em que não recebo o retorno das funções de exibir o contato selecionado e nem a alteração de contato caso o usuario deseje alterar algum contato.
Os problemas estão ao fim do código marcados com comentarios!
Segue abaixo o codigo:
#include <iostream>
#include <cstring>
#include <locale>
#define MAX 50//Para não precisar mudar cada um individualmente
using namespace std;
//PROTOTIPOS---------------
void menu();
void cadastro(int cadastro);
char* needMemoria(int tam);
void NumeroCont(int Tcont);
int indic(int totalCont, char* Snome);
int mostraC(int indice);
void modificar(int indice);
//-------------------------
struct Agenda
{
char* nome;
char telefone[18];
char* email;
}agenda[MAX];
int main()
{
setlocale(LC_ALL,"");
int Cadas=0;
char nome[MAX];
int opc;
int indice;
do
{
system("cls");
menu();
cin>>opc;
switch(opc)
{
case 1:
Cadas++;//acrescenta a quantidade de cadastros realizados
cadastro(Cadas);
break;
case 2:
NumeroCont(Cadas);
break;
case 3:
cin.ignore(1000,'\n');
cout<<"Nome do contato: \n";
scanf("%[^\n]c",nome);
setbuf(stdin,NULL);
indice=indic(Cadas, nome);
if(indice >= 0 && indice <= 99)
{
mostraC(indice);
}
else
{
cout<<"Contato não cadastrado!\n";
}
break;
case 4:
cout<<"Indice do contato[1 - 99]: \n";
cin>>indice;
indice-=1;
if(indice>=0 && indice <=99)
{
modificar(indice);
}
else {cout<<"Contato não existente!\n";}
break;
case 5:
cout<<"5\n\n";
case 0:
cout<<"OBRIGADO, PELA preferência\n\n";
break;
default:
cout<<"ERRO! opção desconhecida\n";
}
cout<<Cadas<<" <-REGISTROS\n";//EXCLUIR DEPOIS
system("pause");
}while(opc!=0);
return 0;
}
//MENU-------------
void menu()
{
cout<<"-----MENU-----\n";
cout<<"1-- Adicionar contato: \n";
cout<<"2-- Ver lista de contatos: \n";
cout<<"3-- Ver contato: \n";
cout<<"4-- Modificar contato: \n";
cout<<"5-- Excluir contatos: \n";
cout<<"0-- SAIR! \n";
}
//Funcao adiciona novos contatos
void cadastro(int registro)
{
char dd[MAX];
cin.ignore(100,'\n');
cout<<"Nome do contato: ";
scanf("%[^\n]c",dd);
setbuf(stdin,NULL);
agenda[registro].nome=needMemoria(strlen(dd));//verifica o tamanho e aloca
strcpy(agenda[registro].nome,dd);
cout<<"Numero do contato: ";
scanf("%[^\n]c",agenda[registro].telefone);
setbuf(stdin,NULL);//ideia de test para limpar buff
cout<<"Email do contato: ";
scanf("%[^\n]c",dd);
setbuf(stdin,NULL);
agenda[registro].email=needMemoria(strlen(dd));
strcpy(agenda[registro].email,dd);
}
//tentativa de alocar memoria e verificar se a espaco
//não consegui com new mas esta funcionando com malloc
char* needMemoria(int tam){
char* info = NULL;
info = (char*) malloc(sizeof(tam) * sizeof(char));
if(info == NULL){
printf("ERRO: impossível alocar a quantidade de memória requisitada!");
exit(1);
}
return info;
}
//Total de contatos
void NumeroCont(int Tcont)
{
int cont=1;
for(int i=1;i<=Tcont;i++)
{
cout<<"Contato nº: "<<cont++;
cout<<"Nome : "<<agenda[i].nome<<endl;
cout<<"Numero : "<<agenda[i].telefone<<endl;
cout<<"Email : "<<agenda[i].email<<"\n\n";
}
cout<<"Total de contatos: "<<cont<<"\n\n";
}
//Mostra um contato especifico
int indic(int totalCont, char* Snome)
{
for(int i=0;i<totalCont;i++)
{
if(strcmp(Snome,agenda[i].nome) == 0)
{
return i;
}
}
return -1;
}
//Mostra o indice selecionado
int mostraC(int indice)//PROBLEMA não RETORNA E FECHA O PROGRAMA COM ERRO!
{
cout<<"Nome : "<<agenda[indice].nome;
cout<<"Telefone: "<<agenda[indice].telefone;
cout<<"Email : "<<agenda[indice].email;
}
//Modifica um contato
void modificar(int indice)//PROBLEMA não RETORNA E FECHA O PROGRAMA COM ERRO!
{
char* nome;
char telefone[18];
char* email;
char dd[MAX];
cin.ignore(100,'\n');
cout<<"Nome do contato: ";
scanf("%[^\n]c",dd);
setbuf(stdin,NULL);
nome=needMemoria(strlen(dd));//verifica o tamanho e aloca
cout<<"Numero do contato: ";
scanf("%[^\n]c",agenda[indice].telefone);
setbuf(stdin,NULL);//ideia de test para limpar buff
cout<<"Email do contato: ";
scanf("%[^\n]c",dd);
setbuf(stdin,NULL);
email=needMemoria(strlen(dd));
strcpy(agenda[indice].nome,nome);
strcpy(agenda[indice].telefone,telefone);
strcpy(agenda[indice].email,email);
}
Desde ja agradeço toda ajuda!