Agenda telefonica

raptor123

Membro
Boas pessoal!
Será k alguem me pode esclarer uma duvida:
Neste programa, nao guarda o valor de "Numero de telefone" e quando meto para "inserir contacto", fiko com a opção "sair" inactiva. Alguem me pode corrigir o programa?
Já agora o programa é uma agenda telefonica, e é suposto inserir e mostrar contactos, apenas.

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
#include <dos.h>
int mostralista()
{
char ch;
printf("Lista de contactos :\n\n");
FILE *vx3;
vx3 = fopen("pap.txt" , "r");
ch=getc(vx3); // Lê um caracter do ficheiro "pap.txt".
while(ch!=EOF) //Enquanto o caracter nao chegar ao fim do ficheiro...
{
putchar(ch); // Mostra no monitor o ficheiro "pap.txt".
ch=getc(vx3); // Guarda o caracter ch no ficheiro "pap.txt"
}
fclose(vx3); // Fecha o ficheiro "pap.txt".
getch();
}
char inserir()
{
char nome[10];
char morada[25];
char opcao;
int telefone[9];
FILE *vx3;
fflush(stdin); // Despeja os dados no disco
vx3 = fopen("pap.txt" , "a"); // Abre o ficheiro "pap.txt".
printf("Insira o nome do contacto: ");
gets(nome); // Guarda o nome do contacto na variavel "nome".
fflush(stdin); // Despeja os dados no disco
printf("Insira o numero de telefone: ");
scanf("%d", &telefone); // Guarda o numero do telefone na variavel "telefone".
fflush(stdin); // Despeja os dados no disco
printf("Insira a morada: ");
gets(morada);
fflush(stdin);
fprintf(vx3, "Nome do contacto: %s, Numero de telefone: %d, Morada: %s \n",nome,telefone,morada); // Escreve no ficheiro "c.txt" o nome e o numero de telefone do contacto que foi inserido anteriormente.
printf("Deseja inserir mais contactos? S/N \n");
fflush(stdin); // Despeja os dados no disco
scanf(" %c", &opcao); // Guarda a opção na variavel "opcao".
switch(opcao) // Verifica se a opção é "n" ou "s".
{
case 's' :
case 'S' : inserir() ; break; // Se for "s" chama outra vez a função "inserir" para inserir mais um contacto
case 'n' :
case 'N' : exit(1); break; // Se for "n" sai.
}
fclose(vx3); // Fecha o ficheiro "pap.txt".
}

int main()
{
printf("\t\t\tAgenda Telefonica\n"); // Mostra o menu.
printf(" Carregue no numero para ir para a opção desejada :\n\n"); // Aparece a mesagem "Carregue no numero para ir para a opção desejada :"
printf("1 - Inserir/adicionar contacto na lista\n"); // Aparece a mensagem "1 - Inserir/adicionar contacto na lista"
printf("2 - Consultar a agenda telefonica\n"); // Aparece a mensagem "2 - Consultar a agenda telefónica"
printf("0 - Sair\n\n\n"); // Aparece a mensagem "0 - Sair"
char escolha;
scanf(" %s", &escolha); // Guarda a opção escolhida.
switch(escolha) // Verifica qual foi a opção.
{
case '1' :
inserir();
break; // Caso a operação escolhida seja a "1" inicia o procedimento "inserir".
case '2' :
mostralista(); // Caso a opção escolhida seja "2" chama o procedimento "mostralista".
break;

case '0' :
exit(1); // Caso a opção escolhida seja "0" sai.
break;
}
}

Desculpem lá de o tópico fikar tao grande, mas é k eu preciso mesmo de pôr isto a funcionar como deve ser.
Agradeço ***** help!
Cumps.
 
usa as tags para código para facilitar a leitura..., mas segundo o k me apercebi não tens ***** return na função inserir e esta deveria devolver um char..., salvo erro o main "espera" que seja devolvido um char..., embora k possa ter visto mal...

abraços, HecKel
 
é k eu nunca soube utilizar a função "return" muito bem, alguem me pode explicar como é k o meto o return, já experimentei "return char inserir();" e deu erro.
Agradecia ajuda.
Cumps.
 
basicamente, convem sabermos o que faz concretamente o inserir(), ainda n percebi mt bem o teu código, utiliza as tags de código, sff

o return serve para RETORNAR algo do tipo da função.

a tua função é do tipo char (porque no inicio da função está char inserir()) logo tens de devolver um char, por exemplo:

Código:
return 'a' ;

Se fosse do tipo inteiro farias
Código:
return 1 ;
(isto foi apenas um exemplo, pode ser o numero que quiseres, ou variável do tipo inteiro, tal como a outra pode ser qualquer caracter ou uma variável do tipo char)

Organiza melhor o teu código, sff, basta meteres as tags respectivas (que n consigo escrever aqui sem que sejam executadas..., faz citar do meu post e vê os exemplos)

abraços, HecKel
 
assim de repente, passa as funções para o tipo void, porque em nenhuma delas precisas de devolver algo. Numa mostras uma lista no ecran, logo não precisas de estar a devolver nada, noutra inseres, não precisas de devolver nada também, passa ambas para void. Já agora o switch convém ter um "default" para quando se insere uma opção que não esteja lá (mas isso já é uma pintelhice nesse teu exemplo ;) )

vou ver com mais atenção e já te digo mais qualquer coisa, se necessário!

edit: na função main tens de passar a declaração da variável "escolha", antes dos printfs

em princípio deve funcionar, acho eu, compila e vê :)
 
Última edição:
Estive a ver o teu código, e digo-te se isto for para uma cadeira, e se eu fosse teu professor tirava-te 1 valor na nota só por misturares declarações de variáveis com printf's e outro código (função main).
Depois onde tens
Código:
char inserir()
podes muito bem ter
Código:
void inserir()
uma vez que não precisas de returnar nenhum valor, o mesmo se aplica à função mostralista.

na funcção mostralista tens
Código:
ch=getc(vx3); // Guarda o caracter ch no ficheiro "pap.txt"
para quê? não é só para mostar, abris-te o ficheiro como sendo apenas de leitura, por isso não precisas de voltar a escrever para o ficheiro, acho eu, mas os entendidos em c que me corrijam se eu estiver mal.

Quanto ao código não detecto a falha mas como já não pego no c à muito tempo. já agora tens num comentário
Escreve no ficheiro "c.txt"
não deveria de ser pap.txt onde é que arranjas-te o código?


---Edit---
Na função main

Código:
char escolha;

porque não
Código:
 int escolha
O teu case só tem números.
 
Última edição:
HecKel disse:
basicamente, convem sabermos o que faz concretamente o inserir(), ainda n percebi mt bem o teu código, utiliza as tags de código, sff

o return serve para RETORNAR algo do tipo da função.

a tua função é do tipo char (porque no inicio da função está char inserir()) logo tens de devolver um char, por exemplo:

Código:
return 'a' ;

Se fosse do tipo inteiro farias
Código:
return 1 ;
(isto foi apenas um exemplo, pode ser o numero que quiseres, ou variável do tipo inteiro, tal como a outra pode ser qualquer caracter ou uma variável do tipo char)

Organiza melhor o teu código, sff, basta meteres as tags respectivas (que n consigo escrever aqui sem que sejam executadas..., faz citar do meu post e vê os exemplos)

abraços, HecKel

O programa continua a não guardar o nº de telefone e quando ele pergunta se quer inserir mais contactos, se eu dizer que nao, sai logo do programa. Já agora como é k eu fazo as tags, é k eu sou novo nisto.
Fica bem!
 
Back
Topo