Dev - C++ - c/c++ problema con el retorno de la función

 
Vista:
Imágen de perfil de Darkarcher888

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:
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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

c/c++ problema con el retorno de la función

Publicado por Harles (8 intervenciones) el 14/12/2021 21:46:35
int mostraC(int indice)

por que es int ? parece ser una funcion void y no int que no retorna nada. solo imprime los datos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar