No Livro C Completo e Total tem um bom exemplo de listas duplamentes encadeadas. De uma olhada nele.
Versão Imprimível
No Livro C Completo e Total tem um bom exemplo de listas duplamentes encadeadas. De uma olhada nele.
pow vlw mesmo, eh bom saber que a gende dacomunidade linux sempre tem alguem com quem contar quando não souber mais oq fazer, vou tentar fazer algumas alterações aki, quando a função listar, oq eu gostaria mesmo de fazer era um menu de navegação entre os contatos, se eu fazer soh com a opção de avançar, vai dah certo, eu jah fiz assim, mais assim eu num quero naum...vo raxa a cuca aki pra tenta acha um jeito, outra coisa, onde eu acho o livro C Completo e Total, só comprando???
a2gs, suas dicas foram muito uteis, corrigi os problemas que você mencionou, mas mesmo assim continua naum funcionando, eu num sei mais oq fazer...
1. Re-faça seu código, utilizando protótipos para as funções.
2. Não invoque a função main de qualquer parte do seu código, isto é errado. Crie outra função com a mesma finalidade, assim poderá chamá-la de qualquer outra função do escopo global do mesmo arquivo fonte.
3. Tente utilizar parâmetros nas funções para interação, e não variáveis globais.
4. Evite utilizar keywords conhecidas (null) para nomear variáveis, mesmo que seja com case diferente.
5. Utilize uma indentação de no mínimo 4 espacos (ou 1 tab) para cada escopo.
6. Evite utilizar funções sujeitas a overflows (strcat, sprintf, strcpy), sempre há outra função correspondente, com checagem de tamanho (strncat, snprintf, strncpy), ou então, crie você mesmo.
7. Invocar funções para execução de programas externos no sistema (system, exec**, etc) não é seguro.
8. Antes de finalizar a aplicação você deve liberar a memória alocada no HEAP (alocações feitas com malloc).
9. A função main deve ser declarada conforme a convenção padrão da linguagem (ela sempre deve retornar um valor int).
Se você está ingressando nesse mundo, tente fazer aplicações um pouco mais simples para entender o porque de não utilizar system(), sprintf, strcat, strcpy, etc.
Entenda como funcionam valores passados como parâmetros e os valores de retorno das funções.
Dominando isto, você fará essa aplicação parecer muito fácil, e quem olhar seu código, provavelmente vai entender sem perder horas.
Outra coisa que vi:
Código :
char value[255]; printf("%s", pergunta); scanf("%s", value); if(strlen(value) > tam)
este if não vai ajudar em nada, se alguém digitar 600 caracteres, o programa irá sobrescrever parte de si mesmo, pois a função scanf não limita o buffer de leitura (entrada) que será armazenado na variável, logo, posso digitar 600 caracteres, assim o programa tentará salvar o que eu digitei na variável onde só cabem 255, isto vai gerar um buffer-overflow, ou seja, seu programa está com uma falha de segurança crítica e fácil de explorar.