Retornar valor de uma função para outra

1. Retornar valor de uma função para outra

Madson
mdkawaii

(usa Outra)

Enviado em 16/10/2019 - 03:23h

Pessoal, então. Eu tô com um projeto de desenvolve uma agenda e tô com um problema de armazenar e printar o valor de uma struct... Eu mando o usuário para uma struct, ela lê os dados e eu quero mostrar isso em outra função. Não posso colocar na main pois minha main contem return main();, ou seja, qualquer variável que eu ler na main, quando acontecer o return main();, elas irão ser zeradas pois irá ler a main tudo de novo... Então o meu problema é: mandei o usuário da main para uma função que vai ler os dados deles e armazenar.. porém, quando ele pedir pra ver esses resultados na main, como faço para mostrar sem ter que declarar na main? pois se eu declaro uma struct lá na parte de mostrar o dados que ele digitou, não vai conter nada pois após ele digitar os dados vai dar return main();, assim vai sumir o que ele digitou na main e vai estar na função que declarei fora... mas como chamar ela? uso ponteiro(mas não sei como)?
Irei deixar as linhas marcadas onde está meu problema:
Segue o código:

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

struct agenda{
char PrimeiroNome[15];
char UltimoNome[15];
char ddd[6];
char telefone[12];
};
void PrintContatos();
void NomeTel();

//AQUI O USUARIO IRA SER REDIRECIONADO PARA ENTRAR COM SEUS DADOS

void NomeTel(struct agenda NT){
printf("\nDigite o primeiro nome do contato: ");
scanf("%14s", NT.PrimeiroNome);
printf("Digite o ultimo nome do contato: ");
scanf("%14s", NT.UltimoNome);
printf("Digite o DDD do contato: ");
scanf("%5s", NT.ddd);
printf("Digite o numero do contato: ");
scanf("%11s", NT.telefone);
}

//AQUI É ONDE EU QUERO QUE APAREÇA OS DADOS QUE ELE DIGITOU NA FUNÇÃO ACIMA

void PrintContatos(struct agenda x){

printf("\n\nContato: ");
printf("\nPrimeiro nome do contato: %s", x.PrimeiroNome);
printf("\nUltimo nome do contato: %s", x.UltimoNome);
printf("\nNumero do contato: (%s) %s", x.ddd, x.telefone);
}


int main(){
int opinici, numlistar, numadc, sublistar;
printf("\t\t\t\t\tBem-vindo a agenda!\n");
printf("\n");
printf("Tecle ENTER para ir a agenda...");
getchar();
system("cls");
printf("\t\t\t\tOpcoes disponiveis na agenda: \n");
printf("\n");
printf("Adicionar um contato a agenda (1)\n");
printf("\nListar contatos da agenda (2)\n");
printf("\nSair da agenda (3)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", &opinici);

switch(opinici){

case 1:
system("cls");
printf("\t\t\t\t\tAdicione um contato a sua agenda: \n");

//AQUI É ONDE DEVERIA ESTAR A FUNÇÃO QUE EU CHAMO NORMALMENTE E O USUARIO VAI, FICA A DEMONSTRAÇÃO ABAIXO
struct agenda x;
NomeTel(x);

printf("\n\nContato armazenado!");
printf("\n");
do{
printf("\nDeseja voltar ao menu principal agora? Digite 1 para SIM e 2 para SAIR da agenda: ");
scanf("%i", &numadc);
if(numadc == 1){
system("cls");
return main();
}
if(numadc == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");
}
}while(numadc < 1 && numadc > 2);

break;

case 2:
system("cls");
printf("\t\t\t\t\tLista de Contatos: \n");
printf("\n");

//AQUI É ONDE ESTÁ O PROBLEMA... NAO CONSIGO CHAMAR, POIS, SE EU PASSO "x" COMO PARAMETRO. NAO CONTEM NADA NA VARIAVEL POIS FOI DADO return main();

printf("\n\n");
printf("Acoes disponiveis: \n");
printf("\n");
printf("\tEditar contato (1)\n");
printf("\tApagar contato (2)\n");
printf("\tVoltar ao menu principal(3)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", &numlistar);
if(numlistar == 1){
system("cls");
printf("Pagina em construcao!\n");
do{
printf("\nDigite 1 para VOLTAR ao menu inicial e 2 para ENCERRAR a agenda: ");
scanf("%i", &sublistar);
if(sublistar == 1){
system("cls");
return main();
}
if(sublistar == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");

}
}while(sublistar > 2 || sublistar < 1);
}
if(numlistar == 2){
system("cls");
printf("Pagina em construcao!\n");
do{
printf("\nDigite 1 para VOLTAR ao menu inicial e 2 para ENCERRAR a agenda: ");
scanf("%i", &sublistar);
if(sublistar == 1){
system("cls");
return main();
}
if(sublistar == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");

}
}while(sublistar > 2 || sublistar < 1);
}
if(numlistar == 3){
system("cls");
return main();
}
break;

case 3:
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");
break;

default:
return main();
}
system("pause");
return 0;
}
 



  


2. Re: Retornar valor de uma função para outra

Paulo
paulo1205

(usa Ubuntu)

Enviado em 17/10/2019 - 14:06h

mdkawaii escreveu:

Pessoal, então. Eu tô com um projeto de desenvolve uma agenda e tô com um problema de armazenar e printar o valor de uma struct... Eu mando o usuário para uma struct, ela lê os dados e eu quero mostrar isso em outra função. Não posso colocar na main pois minha main contem return main();,


Isso é um mau sinal. A função main() rarissimamente — ou rarississississimamente — deve ser explicitamente invocada em qualquer parte do programa. Se você o está fazendo, provavelmente está com um problema de projeto.

ou seja, qualquer variável que eu ler na main, quando acontecer o return main();, elas irão ser zeradas pois irá ler a main tudo de novo...


Mesmo que você precisasse chamar main() recursivamente, o que é altamente improvável, há meios padronizados de preservar valores de variáveis entre invocações. Variáveis estáticas, para ser mais preciso.

Então o meu problema é: mandei o usuário da main para uma função que vai ler os dados deles e armazenar..


Armazenar onde? Se é uma agenda, é de se supor que armazene ou em um lugar permanente ou, pelo menos, em um local estático visível em diferentes partes do programa ou em área dinamicamente alocada e passada entre as partes do programa através de ponteiros.

porém, quando ele pedir pra ver esses resultados na main, como faço para mostrar sem ter que declarar na main? pois se eu declaro uma struct lá na parte de mostrar o dados que ele digitou, não vai conter nada pois após ele digitar os dados vai dar return main();, assim vai sumir o que ele digitou na main e vai estar na função que declarei fora... mas como chamar ela? uso ponteiro(mas não sei como)?
Irei deixar as linhas marcadas onde está meu problema:
Segue o código:

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

struct agenda{
char PrimeiroNome[15];
char UltimoNome[15];
char ddd[6];
char telefone[12];
};
void PrintContatos();
void NomeTel();


Essas declarações não são perfeitamente compatíveis com as formas usadas no momento das definições das funções, mais abaixo. Tente uniformizá-las.


//AQUI O USUARIO IRA SER REDIRECIONADO PARA ENTRAR COM SEUS DADOS

void NomeTel(struct agenda NT){


Com essa forma, você diz que a função recebe uma cópia do valor do dado que for usado como argumento no momento em que a função for invocada. Então, como NT é uma mera cópia que que tenha sido colocado como argumento, qualquer alteração em NT não será refletida no argumento original.

Não sei se você já trabalhou com outra linguagem de programação anteriormente. Muitas linguagens usam passagem de parâmetros para função por referência (i.e. a função recebe o endereço do argumento, de modo a que consegue chegar ao argumento original por meio desse endereço) de modo mais ou menos implícito. Em C não existe essa coisa de argumento implícito: todos os argumentos são sempre passados à função por valor (isto é: o valor do argumento é calculado e copiado para o parâmetro da função; razão pela qual eu costumo preferir a expressão “por cópia de valor” em lugar de “por valor”, mas esta última é a forma como é universalmente chamada, então habitue-se a ela). Se você quiser efeito semelhante ao de passagem por referência, você tem de modificar a função para receber (a cópia de) um endereço (ou seja: um ponteiro) para o dado e, na hora de invocar a função, aplica o operador de obtenção de endereço (&) ao objeto cujo conteúdo você quer poder endereçar por dentro da função.

Obviamente que, se você escolher modificar o tipo de NT de struct agenda para struct agenda *, o acesso aos campos não será mais através do operador “.”, mas sim através do operador “->” (e.g. “NT.PrimeiroNome” virará “NT->PrimeiroNome”, “NT.ddd” será “NT->ddd” etc.).

	printf("\nDigite o primeiro nome do contato: ");
scanf("%14s", NT.PrimeiroNome);
printf("Digite o ultimo nome do contato: ");
scanf("%14s", NT.UltimoNome);
printf("Digite o DDD do contato: ");
scanf("%5s", NT.ddd);
printf("Digite o numero do contato: ");
scanf("%11s", NT.telefone);
}

//AQUI É ONDE EU QUERO QUE APAREÇA OS DADOS QUE ELE DIGITOU NA FUNÇÃO ACIMA

void PrintContatos(struct agenda x){


Aqui, como você está apenas imprimindo valores, sem os modificar, você poderia até usar passagem de argumento por valor. No entanto, no seu caso, copiar a estrutura inteira muito provavelmente é mais custoso do que copiar apenas o endereço. Desse modo, eu sugiro passagem através de ponteiro também aqui, com a diferença de que aqui você pode fazer com que o ponteiro aponte para um objeto constante (i.e. você pode usar const struct agenda * como tipo do argumento).

	
printf("\n\nContato: ");
printf("\nPrimeiro nome do contato: %s", x.PrimeiroNome);
printf("\nUltimo nome do contato: %s", x.UltimoNome);
printf("\nNumero do contato: (%s) %s", x.ddd, x.telefone);
}


Preciso sair agora, então não vou analisar o resto do seu programa por enquanto. Tente fazer as alterações sobre as quais já discutimos aqui, especialmente a eliminação da espúria chamada explícita a main().



int main(){
int opinici, numlistar, numadc, sublistar;
printf("\t\t\t\t\tBem-vindo a agenda!\n");
printf("\n");
printf("Tecle ENTER para ir a agenda...");
getchar();
system("cls");
printf("\t\t\t\tOpcoes disponiveis na agenda: \n");
printf("\n");
printf("Adicionar um contato a agenda (1)\n");
printf("\nListar contatos da agenda (2)\n");
printf("\nSair da agenda (3)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", &opinici);

switch(opinici){

case 1:
system("cls");
printf("\t\t\t\t\tAdicione um contato a sua agenda: \n");

//AQUI É ONDE DEVERIA ESTAR A FUNÇÃO QUE EU CHAMO NORMALMENTE E O USUARIO VAI, FICA A DEMONSTRAÇÃO ABAIXO
struct agenda x;
NomeTel(x);

printf("\n\nContato armazenado!");
printf("\n");
do{
printf("\nDeseja voltar ao menu principal agora? Digite 1 para SIM e 2 para SAIR da agenda: ");
scanf("%i", &numadc);
if(numadc == 1){
system("cls");
return main();
}
if(numadc == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");
}
}while(numadc < 1 && numadc > 2);

break;

case 2:
system("cls");
printf("\t\t\t\t\tLista de Contatos: \n");
printf("\n");

//AQUI É ONDE ESTÁ O PROBLEMA... NAO CONSIGO CHAMAR, POIS, SE EU PASSO "x" COMO PARAMETRO. NAO CONTEM NADA NA VARIAVEL POIS FOI DADO return main();

printf("\n\n");
printf("Acoes disponiveis: \n");
printf("\n");
printf("\tEditar contato (1)\n");
printf("\tApagar contato (2)\n");
printf("\tVoltar ao menu principal(3)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", &numlistar);
if(numlistar == 1){
system("cls");
printf("Pagina em construcao!\n");
do{
printf("\nDigite 1 para VOLTAR ao menu inicial e 2 para ENCERRAR a agenda: ");
scanf("%i", &sublistar);
if(sublistar == 1){
system("cls");
return main();
}
if(sublistar == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");

}
}while(sublistar > 2 || sublistar < 1);
}
if(numlistar == 2){
system("cls");
printf("Pagina em construcao!\n");
do{
printf("\nDigite 1 para VOLTAR ao menu inicial e 2 para ENCERRAR a agenda: ");
scanf("%i", &sublistar);
if(sublistar == 1){
system("cls");
return main();
}
if(sublistar == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");

}
}while(sublistar > 2 || sublistar < 1);
}
if(numlistar == 3){
system("cls");
return main();
}
break;

case 3:
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");
break;

default:
return main();
}
system("pause");
return 0;
}




... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


3. Re: Retornar valor de uma função para outra

Madson
mdkawaii

(usa Outra)

Enviado em 18/10/2019 - 03:27h

paulo1205 escreveu:

mdkawaii escreveu:

Pessoal, então. Eu tô com um projeto de desenvolve uma agenda e tô com um problema de armazenar e printar o valor de uma struct... Eu mando o usuário para uma struct, ela lê os dados e eu quero mostrar isso em outra função. Não posso colocar na main pois minha main contem return main();,


Isso é um mau sinal. A função main() rarissimamente — ou rarississississimamente — deve ser explicitamente invocada em qualquer parte do programa. Se você o está fazendo, provavelmente está com um problema de projeto.

ou seja, qualquer variável que eu ler na main, quando acontecer o return main();, elas irão ser zeradas pois irá ler a main tudo de novo...


Mesmo que você precisasse chamar main() recursivamente, o que é altamente improvável, há meios padronizados de preservar valores de variáveis entre invocações. Variáveis estáticas, para ser mais preciso.

Então o meu problema é: mandei o usuário da main para uma função que vai ler os dados deles e armazenar..


Armazenar onde? Se é uma agenda, é de se supor que armazene ou em um lugar permanente ou, pelo menos, em um local estático visível em diferentes partes do programa ou em área dinamicamente alocada e passada entre as partes do programa através de ponteiros.

porém, quando ele pedir pra ver esses resultados na main, como faço para mostrar sem ter que declarar na main? pois se eu declaro uma struct lá na parte de mostrar o dados que ele digitou, não vai conter nada pois após ele digitar os dados vai dar return main();, assim vai sumir o que ele digitou na main e vai estar na função que declarei fora... mas como chamar ela? uso ponteiro(mas não sei como)?
Irei deixar as linhas marcadas onde está meu problema:
Segue o código:

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

struct agenda{
char PrimeiroNome[15];
char UltimoNome[15];
char ddd[6];
char telefone[12];
};
void PrintContatos();
void NomeTel();


Essas declarações não são perfeitamente compatíveis com as formas usadas no momento das definições das funções, mais abaixo. Tente uniformizá-las.


//AQUI O USUARIO IRA SER REDIRECIONADO PARA ENTRAR COM SEUS DADOS

void NomeTel(struct agenda NT){


Com essa forma, você diz que a função recebe uma cópia do valor do dado que for usado como argumento no momento em que a função for invocada. Então, como NT é uma mera cópia que que tenha sido colocado como argumento, qualquer alteração em NT não será refletida no argumento original.

Não sei se você já trabalhou com outra linguagem de programação anteriormente. Muitas linguagens usam passagem de parâmetros para função por referência (i.e. a função recebe o endereço do argumento, de modo a que consegue chegar ao argumento original por meio desse endereço) de modo mais ou menos implícito. Em C não existe essa coisa de argumento implícito: todos os argumentos são sempre passados à função por valor (isto é: o valor do argumento é calculado e copiado para o parâmetro da função; razão pela qual eu costumo preferir a expressão “por cópia de valor” em lugar de “por valor”, mas esta última é a forma como é universalmente chamada, então habitue-se a ela). Se você quiser efeito semelhante ao de passagem por referência, você tem de modificar a função para receber (a cópia de) um endereço (ou seja: um ponteiro) para o dado e, na hora de invocar a função, aplica o operador de obtenção de endereço (&) ao objeto cujo conteúdo você quer poder endereçar por dentro da função.

Obviamente que, se você escolher modificar o tipo de NT de struct agenda para struct agenda *, o acesso aos campos não será mais através do operador “.”, mas sim através do operador “->” (e.g. “NT.PrimeiroNome” virará “NT->PrimeiroNome”, “NT.ddd” será “NT->ddd” etc.).

	printf("\nDigite o primeiro nome do contato: ");
scanf("%14s", NT.PrimeiroNome);
printf("Digite o ultimo nome do contato: ");
scanf("%14s", NT.UltimoNome);
printf("Digite o DDD do contato: ");
scanf("%5s", NT.ddd);
printf("Digite o numero do contato: ");
scanf("%11s", NT.telefone);
}

//AQUI É ONDE EU QUERO QUE APAREÇA OS DADOS QUE ELE DIGITOU NA FUNÇÃO ACIMA

void PrintContatos(struct agenda x){


Aqui, como você está apenas imprimindo valores, sem os modificar, você poderia até usar passagem de argumento por valor. No entanto, no seu caso, copiar a estrutura inteira muito provavelmente é mais custoso do que copiar apenas o endereço. Desse modo, eu sugiro passagem através de ponteiro também aqui, com a diferença de que aqui você pode fazer com que o ponteiro aponte para um objeto constante (i.e. você pode usar const struct agenda * como tipo do argumento).

	
printf("\n\nContato: ");
printf("\nPrimeiro nome do contato: %s", x.PrimeiroNome);
printf("\nUltimo nome do contato: %s", x.UltimoNome);
printf("\nNumero do contato: (%s) %s", x.ddd, x.telefone);
}


Preciso sair agora, então não vou analisar o resto do seu programa por enquanto. Tente fazer as alterações sobre as quais já discutimos aqui, especialmente a eliminação da espúria chamada explícita a main().



int main(){
int opinici, numlistar, numadc, sublistar;
printf("\t\t\t\t\tBem-vindo a agenda!\n");
printf("\n");
printf("Tecle ENTER para ir a agenda...");
getchar();
system("cls");
printf("\t\t\t\tOpcoes disponiveis na agenda: \n");
printf("\n");
printf("Adicionar um contato a agenda (1)\n");
printf("\nListar contatos da agenda (2)\n");
printf("\nSair da agenda (3)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", &opinici);

switch(opinici){

case 1:
system("cls");
printf("\t\t\t\t\tAdicione um contato a sua agenda: \n");

//AQUI É ONDE DEVERIA ESTAR A FUNÇÃO QUE EU CHAMO NORMALMENTE E O USUARIO VAI, FICA A DEMONSTRAÇÃO ABAIXO
struct agenda x;
NomeTel(x);

printf("\n\nContato armazenado!");
printf("\n");
do{
printf("\nDeseja voltar ao menu principal agora? Digite 1 para SIM e 2 para SAIR da agenda: ");
scanf("%i", &numadc);
if(numadc == 1){
system("cls");
return main();
}
if(numadc == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");
}
}while(numadc < 1 && numadc > 2);

break;

case 2:
system("cls");
printf("\t\t\t\t\tLista de Contatos: \n");
printf("\n");

//AQUI É ONDE ESTÁ O PROBLEMA... NAO CONSIGO CHAMAR, POIS, SE EU PASSO "x" COMO PARAMETRO. NAO CONTEM NADA NA VARIAVEL POIS FOI DADO return main();

printf("\n\n");
printf("Acoes disponiveis: \n");
printf("\n");
printf("\tEditar contato (1)\n");
printf("\tApagar contato (2)\n");
printf("\tVoltar ao menu principal(3)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", &numlistar);
if(numlistar == 1){
system("cls");
printf("Pagina em construcao!\n");
do{
printf("\nDigite 1 para VOLTAR ao menu inicial e 2 para ENCERRAR a agenda: ");
scanf("%i", &sublistar);
if(sublistar == 1){
system("cls");
return main();
}
if(sublistar == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");

}
}while(sublistar > 2 || sublistar < 1);
}
if(numlistar == 2){
system("cls");
printf("Pagina em construcao!\n");
do{
printf("\nDigite 1 para VOLTAR ao menu inicial e 2 para ENCERRAR a agenda: ");
scanf("%i", &sublistar);
if(sublistar == 1){
system("cls");
return main();
}
if(sublistar == 2){
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");

}
}while(sublistar > 2 || sublistar < 1);
}
if(numlistar == 3){
system("cls");
return main();
}
break;

case 3:
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");
break;

default:
return main();
}
system("pause");
return 0;
}




... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)


Então, muito obrigado mesmo pela ajuda. Pude compreender que eu estava fazendo uma verdadeira bagunça no código... Desculpe-me se pareceu realmente muito feio, comecei a programar fazem uns 4 meses e eu nunca tinha programado com nenhuma linguagem antes. Sou muito iniciante nisso, ainda.
Consegui fazer umas alterações no código original... Se puder me responder e, dizer se tem algo que eu ainda esteja pecando muito, por favor, me dê um toque...
Segue o código atualizado:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>

struct agenda{
char PrimeiroNome[15];
char UltimoNome[15];
char ddd[6];
char telefone[12];
};
void NomeTel(struct agenda *NT){
printf("\nDigite o primeiro nome do contato: ");
scanf("%14s", NT->PrimeiroNome);
printf("Digite o ultimo nome do contato: ");
scanf("%14s", NT->UltimoNome);
printf("Digite o DDD do contato: ");
scanf("%5s", NT->ddd);
printf("Digite o numero do contato: ");
scanf("%11s", NT->telefone);
}
void PrintContatos(struct agenda x){
printf("\n\nContato: ");
printf("\nPrimeiro nome do contato: %s", x.PrimeiroNome);
printf("\nUltimo nome do contato: %s", x.UltimoNome);
printf("\nNumero do contato: (%s) %s", x.ddd, x.telefone);
}
void PrimeiraParte(int *aux){
system("cls");
printf("\t\t\t\tOpcoes disponiveis na agenda: \n");
printf("\n");
printf("Adicionar um contato a agenda (1)\n");
printf("\nListar contatos da agenda (2)\n");
printf("\nSair da agenda (3)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", aux);
}

int main(){
int opinici, numlistar, numadc = 0, sublistar, *aux, sair = 0, contador = 0, i = 2;
struct agenda contatin[2];
printf("\t\t\t\t\tBem-vindo a agenda!\n");
printf("\n");
printf("Tecle ENTER para ir a agenda...");
getchar();
while(sair == 0){
aux = &opinici;
PrimeiraParte(aux);
switch(opinici){
case 1:
system("cls");
printf("\t\t\t\t\tAdicione um contato a sua agenda: \n");
for(contador = 0; contador < i; contador++){
NomeTel(&contatin[contador]);
printf("\n\nContato armazenado!\n");
}
printf("\n");
printf("\nTecle QUALQUER TECLA para continuar com a agenda e voltar ao menu inicial...");
getche();
system("cls");
break;

case 2:
system("cls");
printf("\t\t\t\t\tLista de Contatos: \n");
printf("\n");
for(contador = 0; contador < i; contador++){
PrintContatos(contatin[contador]);
}
printf("\n\n");
printf("Acoes disponiveis: \n");
printf("\n");
printf("\tEditar contato (1)\n");
printf("\tApagar contato (2)\n");
printf("\nDigite o numero, de uma das opcoes listadas, para realizar uma acao: ");
scanf("%i", &sublistar);
printf("\nTecle QUALQUER TELCA para continuar com a agenda e voltar ao menu inicial...");
getche();
system("cls");
break;

case 3:
system("cls");
printf("\t\t\t\t\t************************\n");
printf("\t\t\t\t\t***");
printf(" AGENDA ENCERRADA ***\n");
printf("\t\t\t\t\t************************\n");
sair = 1;
break;

default:
printf("\n\n");
printf("Opcao invalida!\nDigite uma das opcoes listadas acima!\n");
printf("Pressione qualquer tecla...");
getche();
system("cls");
}
}
system("pause");
return 0;
}

O código contem algumas variáveis que eu ainda não estou usando, eu ainda não aprendi como armazenar em arquivo... então estão aí só para just in case, hehe.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts