E ai povu, fmz, entaum, eu toh aprendendo a programar em C, dai eu toh fazendo uma agenda telefonica com estruturas e ponteiros, por enquanto eh soh um prototipo, mais mesmo esse prototipo num funciona, já li o código milhares de vezes e não entendo, ele pula alguna scanf, e na parte de listar está muito estranho, compilem e vejam...
XX --------- INICIO DO CÓDIGO ------------ XX
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
struct reg{
char nome[40];
char tel[10];
char end[50];
struct reg *next; /* Ponteiro que corresponde ao proximo registro */
struct reg *back; /* Pomteiro que corresponde ao registro anterior */
} lista;
struct reg *last; /* Ultimo registro */
struct reg *first; /* Primeiro */
struct reg *null; /* Ponteiro NULL */
main(){
system("clear");
null = (struct reg *) malloc(sizeof(lista));
int opcao;
printf ("\nAgenda 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);
}
inserir(){
char opcao;
struct reg *this;
this =(struct reg *) malloc(sizeof(lista));
do{if (this == 0){
printf("\nMemória insuficiente para alocação!");
return (0);
}
inputs("\nInsira o nome do contato: ", this->nome, 40);
inputs("\nInsira o telefone do contato: ", this->tel, 10);
inputs("\nInsira o endereço do contato: ", this->end, 50);
if(first!=0){
last->next = this;
this->back = last;
last = this;
this->next = null;
} else {
first = this;
last = this;
this->next = null;
this->back = null;
}
printf("\nInserir mais um registro?[y/n]");
scanf("%c", &opcao);
}while (opcao != 'n' && opcao != 'N');
printf("\nDesalocando memória...");
free(this);
main();
}
listar(){
int opcao;
struct reg *this;
this = first;
do{
system("clear");
display(this);
printf("\n1. Proximo Registro - 2. Registro Anterior - 3. Voltar para o Menu");
scanf("%d", &opcao);
switch(opcao){
case 1:
if(this->next == null){
printf("\nUltima entrada...");
sleep(1);
}
this = this->next;
case 2:
if(this->back == null){
printf("\nPrimeira entrada...");
sleep(1);
main();
}
this = this->back;
case 3:
main();
}
} while (1);
return;
}
display(this)
struct reg *this;
{
printf("\n\n\n-- Inicio do contato --");
printf("\nNome: %s", this->nome);
printf("\nTelecone: %s", this->tel);
printf("\nEndereço: %s", this->end);
printf("\n-- Fim do contato --\n\n\n");
return;
}
inputs(pergunta, var, tam)
char *pergunta;
char *var;
int tam;
{
char value[255];
printf("%s", pergunta);
scanf("%s", value);
if(strlen(value) > tam)
printf("\nOs dados inseridor superam o limite de caracteres..."); return;
strcpy(var, value);
}
XX ------------------ FIM DO CÓDIGO ----------------- XX