Página 3 de 4 PrimeiroPrimeiro 1234 ÚltimoÚltimo
+ Responder ao Tópico



  1. Você está programando para ambientes Microsoft ?
    Se sim, "clear" não é um programa nativo dos sistemas Microsoft (Windows Family), logo, a chamada da função system irá gerar um warning do sistema operacional em runtime.

    Se estiver programando para ambientes Linux/Unix, estude também como funcionam os debuggers. Aliás, uma boa ajuda para você descobrir o problema do seu programa é colocar alguns "printf"s para mostrar o conteudo das variaveis em todo o programa, assim saberá quais as funções que o programa chamou, o que ele executou ou não. Esta é a maneira fácil de achar um problema, caso você não saiba utilizar um debugger.

    Você está utilizando alguma IDE (KDevelop, Eclipse, C++Builder, DevC++, etc) para programar ? Se sim, todas elas possuem um debugger interno, que economiza MUITO tempo para resolver problemas de lógica. Você pode parar o programa em tempo de execução, em uma determinada linha, assim poderá ver o valor das variáveis, sem precisar colocar "printf"s.

    Qualquer coisa, posta aí denovo.

  2. #12
    c0deks
    Estou programando para Linux-Unix
    Não esto usando nenguma IDE
    Eu fiz algumas alterações, conforme as dicas que foram dadas, o problema eh que agora ao digitar o nome para cadastrar, eu obtenho um Segmentation Fail, jah tentei resolve-lo e mesmo assim nada, segue o codigo alterado:

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

    /* ## Declaração da estrutura ## */
    struct registros{
    char nome[50];
    char tel[10];
    char endereco[50];
    struct registros *proximo; /* Ponteiro que corresponde ao proximo registro */
    struct registros *anterior; /* Pomteiro que corresponde ao registro anterior */
    } lista;
    struct registros *ultimo; /* Ultimo registro */
    struct registros *primeiro; /* Primeiro */
    struct registros *vazio; /* Ponteiro NULL */


    /* ## Prototipos das funções ## */
    void menu(void);
    void inserir(void);
    void listar(void);
    void mostrar(struct registros *este);
    void inserirvalor(char *pergunta, char *var, int tam);



    /* ## Função MAIN */
    int main(){
    menu(); /* Chama o menu */
    }
    /* --------------------*/


    /* ## Função MENU */
    void menu(void)
    {
    system("clear");
    vazio = (struct registros *) malloc(sizeof(lista));
    int opcao;
    printf ("\nAgenderecoa Telefica v0.1 by c0dek\n----------\n\nDigite o numero correspondente a sua opção: \n\n");
    printf ("\n1. Inserir");
    printf ("\n2. Listar");
    printf ("\n3. Sair deste programa");
    printf ("\n----------\n");
    printf("\nSua opção: ");
    puts(" ");
    do{ scanf("%d", &opcao);
    switch(opcao){
    case 1:
    inserir();
    break;
    case 2:
    listar();
    break;
    case 3:
    exit(0);
    default: printf("\nOpção invalida!");
    }
    } while (1);
    }
    /* --------------------*/

    /* ## Função INSERIR */
    void inserir(void)
    {
    char opcao;
    char value[255];
    struct registros *este; /* Ponteiro este apontando para a estrutura registros */
    este =(struct registros *) malloc(sizeof(lista)); /* Allocando memória */
    if (este == 0){
    printf("\nMemória insuficiente para alocação!");
    return;
    }
    do{
    inserirvalor("\nQual o nome do contato: ", "este->nome", 50); /* O Olho do furacão, passo os valores para a função inserirvalor */
    inserirvalor("\nQual o tel do contato: ", "este->tel", 50);
    inserirvalor("\nQual o endereco do contato: ", "este->endereco", 50);

    if(primeiro!=0){
    ultimo->proximo = este;
    este->anterior = ultimo;
    ultimo = este;
    este->proximo = vazio;
    } else {
    primeiro = este;
    ultimo = este;
    este->proximo = vazio;
    este->anterior = vazio;
    }
    printf("\nInserir mais um registro?[y/n]"); /* Pergunta se deseja inserir outro registro */
    opcao=getchar();
    fflush(stdin);
    }while (opcao != 'n' && opcao != 'N');
    printf("\nDesalocando memória...");
    free(este);
    main();
    }
    /* --------------------*/

    /* ## Função LISTAR */
    void listar(void)
    {
    int opcao;
    struct registros *este;
    este = primeiro;
    do{
    system("clear");
    mostrar(este);
    printf("\n1. Proximo Registro - 2. Registro Anterior - 3. Voltar para o Menu");
    scanf("%d", &opcao);
    fflush(stdin);
    switch(opcao){
    case 1:
    if(este->proximo == vazio){
    printf("\nUltima entrada...");
    sleep(1);
    return;
    }
    este = este->proximo;
    case 2:
    if(este->anterior == vazio){
    printf("\nPrimeira entrada...");
    sleep(1);
    return;
    }
    este = este->anterior;
    case 3:
    return;
    }
    } while (1);
    return;
    }
    /* --------------------*/

    /* ## Função mostrar */
    void mostrar(struct registros *este)
    {
    printf("\n\n\n-- Inicio do contato --");
    printf("\nNome: %s", este->nome);
    printf("\nTelecone: %s", este->tel);
    printf("\nenderecoereço: %s", este->endereco);
    printf("\n-- Fim do contato --\n\n\n");
    return;
    }
    /* --------------------*/


    /* ## Função inserirvalor */
    void inserirvalor(char *pergunta, char *var, int tam)
    {
    struct registros *este; /*Ponteiro este apontando para a estrutura registros */
    char value[200]; /* Variavel que guarda o valor temporário */
    printf("%s", var); /* Imprime a variavel de destino soh pra garantir... */
    printf("%s", pergunta); /* Imprime a pergunta */
    scanf("%s", value); /* Escaneia seu valor */
    strncpy(var, value, tam); /* Passa para a variavel de destino */
    }

    /* --------------------*/



  3. Está errado utilizar aspas duplas no buffer de destino:
    Código :
    inserirvalor("\nQual o nome do contato: ", "este->nome", 50); 
    inserirvalor("\nQual o tel do contato: ", "este->tel", 50);
    inserirvalor("\nQual o endereco do contato: ", "este->endereco", 50);

    Você precisa passar o buffer onde será armazenado o que você digitou, ficaria sem as aspas duplas:
    Código :
    inserirvalor("\nQual o nome do contato: ", este->nome, 50);
    inserirvalor("\nQual o tel do contato: ", este->tel, 50);
    inserirvalor("\nQual o endereco do contato: ", este->endereco, 50);

  4. #14
    c0deks
    ph0enix, vlw pela ajuda, mais se eu deixar sem aspas, a função inputs não recebe o valor da variavel corretamente ( eu acho ), pq se eu dexar sem aspas o printf que tem na função inputs que retorna a variavel de destino como garantia não retorna nada, ah num sei veio tah mto confuso eu acho que eu deveria deixar este projeto de lado por enquanto e partir pra outra, quando chegar a hora eu mexo nessa agenda denovo c num acha naum ph0enix?



  5. e vc acha q encontrarah problemas diferentes desses?

    char msg[]="Welcome to the Jungle!";

    (antes de programar em C, faça "portugues-estruturado" num editorzinho, sua vida seria muito mais alegre. E como o ph0enix disse, debug. Um simples printf("aqui 1") resolve 97,3% das vezis)






Tópicos Similares

  1. Respostas: 13
    Último Post: 05-06-2012, 17:32
  2. Samba com funções do AD
    Por l4serma no fórum Servidores de Rede
    Respostas: 2
    Último Post: 07-04-2007, 15:55
  3. Webmail com funções iguais do Microsoft Outlook 2003
    Por Diego Fucitalo no fórum Servidores de Rede
    Respostas: 4
    Último Post: 10-07-2005, 18:56
  4. Estruturas com funcoes em C
    Por SDM no fórum Linguagens de Programação
    Respostas: 13
    Último Post: 18-06-2004, 14:53
  5. SUPRESA - Telefonica com suporte a linux
    Por epf no fórum Assuntos não relacionados
    Respostas: 5
    Último Post: 20-05-2004, 19:15

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L