
c/c++ problema con el retorno de la función
Publicado por Darkarcher888 (1 intervención) el 13/12/2021 16:25:38
Hola, estoy aprendiendo a programar en c ++, y debo admitir que no es fácil, y tuve la idea de desarrollar un pequeño proyecto de AGENDA.
El problema es que no obtengo la devolución de las funciones para mostrar el contacto seleccionado, ni el cambio de contacto si el usuario quiere cambiar algún contacto.
¡Los problemas están al final del código marcado con comentarios!
A continuación se muestra el código:
GRACIAS POR TODA LA AYUDA A PARTIR DE AHORA!
El problema es que no obtengo la devolución de las funciones para mostrar el contacto seleccionado, ni el cambio de contacto si el usuario quiere cambiar algún contacto.
¡Los problemas están al final del código marcado con comentarios!
A continuación se muestra el código:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#include <iostream>
#include <cstring>
#include <locale>
#define MAX 50//Para nao 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 nao existente!\n";}
break;
case 5:
cout<<"5\n\n";
case 0:
cout<<"OBRIGADO, PELA PREFERENCIA\n\n";
break;
default:
cout<<"ERRO! Opçao 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
//nao 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)//<---EL PROBLEMA ESTÁ AQUÍ, NO REGRESE Y CIERRE EL PROGRAMA
{
cout<<"Nome : "<<agenda[indice].nome;
cout<<"Telefone: "<<agenda[indice].telefone;
cout<<"Email : "<<agenda[indice].email;
}
//Modifica um contato
void modificar(int indice)//<---EL PROBLEMA ESTÁ AQUÍ, NO REGRESE Y CIERRE EL PROGRAMA
{
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);
}
GRACIAS POR TODA LA AYUDA A PARTIR DE AHORA!
Valora esta pregunta


0