1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Agenda telefonica

Discussão em 'Programação' iniciada por raptor123, 3 de Dezembro de 2005. (Respostas: 8; Visualizações: 1232)

  1. 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.
     
  2. HecKel

    HecKel The WORM

    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
     
  3. E onde é k é suposto pôr o return?
    Cumps.
     
  4. turbulence

    turbulence Power Member

    no fim da funcao inserir()
     
  5. é 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.
     
  6. HecKel

    HecKel The WORM

    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
     
  7. Bluestrattos

    Bluestrattos Power Member

    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: 4 de Dezembro de 2005
  8. Tuaregue

    Tuaregue Power Member

    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
    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: 4 de Dezembro de 2005
  9. 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!
     

Partilhar esta Página