problema na execuçao

1. problema na execuçao

Valmilson Araujo
comandante

(usa Ubuntu)

Enviado em 17/10/2010 - 14:29h

Boa Tarde a todos!
será que aguem poderia me ajudar com este codigo? nao sei onde estar o erro, é um programa de lista postal, estou começando a aprender em C.

/* um programa simples de lista postal que ilustra o uso
e a manutenção de lista duplamente encadeadas. */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct address {

char name[30];
char street[40];
char city[20];
char state[3];
char zip[11];
struct address *next; /* ponteiro para a proxima entrada */
struct address *prior;/* ponteiro para registro anterior */
}listy_entry;
struct address *start; /* ponteiro para a primeira entrada da lista */
struct address *last; /* ponteiro para a ultima entrada da lista */

struct address *find(char *);

void enter(void),search(void),save(void);
void load(void),list(void);
void delet(struct address **, struct address **);
void dls_store(struct address *i, struct address **start, struct address **last);
void inputs(char *,char *,int), display( struct address *);
int menu_select(void);

main(void)
{
start=last=NULL; /* inicializaos ponteiros de inicio e fim */

for(;;){
switch(menu_select()){
case 1: enter();
break;
case 2: delete(&start, &last);
break;
case 3: list();
break;
case 4: search(); /* encontra uma rua */
break;
case 5: save(); /* grava a lista no disco*/
break;
case 6: load(); /* ler o disco */
break;
case 7: exit(0);
}
}
}

/* Selecione uma operação */
int menu_select(void)
{
char s[80];
int c;

printf("1.Inserir um Nome\n");
printf("2.Deletar um Nome\n");
printf("3.Listar o arquivo\n");
printf("4.Pesquisar\n");
printf("5.Gravar o arquivo\n");
printf("6.Carregar o arquivo\n");
printf("7.Sair\n");
do{
printf("1.Inserir uma Escolha:");
gets(s);
c = atoi(s);
}while(c<0 || c>7);
return c;
}
/* Inserir nomes e endereços. */

void enter(void)
{
struct address *info;

for(;;){
info = (struct address *)malloc(sizeof(listy_entry));
if(!info){
printf("\nsem memoria");
return;
}
inputs("Insira o Nome:",info->name,30);
if(!info->name,(0))break; /* nao efetua a inserção*/
inputs("Insira a Rua:",info->street,40);
inputs("Insira a Cidade:",info->city,20);
inputs("Insira o Estado:",info->state,3);
inputs("Insira o Cep:",info->zip,10);

dls_store(info, &start, &last);
} /* laço de entrada */
}

/* Essa função lê uma string de comprimento maximo count e
evita que a string seja ultrapassada. Ela tambem apresenta
uma mensagem de aviso. */
void inputs(char *prompt, char *s, int count)
{
char p[255];

do{
printf(prompt);
gets(p);
if(strlen (p)>count)
printf("\nmuito longo\n");
}while(strlen (p)>count);
strcpy(s,p);
}

/* Criar uma lista duplamente encadeada ordenada. */
void dls_store(void){
struct address *i, /* novo elemento */
struct address **start; /* Primeiro elemento da lista */
struct address **last /* ultimo elemento da lista */
}
{
struct address *old, *p;
if(*last==NULL){ /* Primeiro elemento da lista */
i->next = NULL;
i->prior = NULL;
*last = i;
*start = i;
return;
}
p = *start; /* começa no topo da lista */

old = NULL;
while(p){
if(strcmp(p->name, i->name)<0){
old = p;
p = p ->next;
}
else{
if(p->prior){
p->prior->next = i;
i->next = p;
i->prior = p->prior;
p->prior = i;
return;
}
i->next = p; /* novo primeiro elmento */
i->prior = NULL;
p->prior = i;
*start = i;
return;
}
}
old->next = i;/* coloca no final */
i->next = NULL;
i->prior = old;
*last = i;
}
/* remove um elemento da lista.*/
void delete(address **start, struct address **last)
{
struct address *info, *find();
char s(80);

printf("Insira o Nome:",s,30);
info = find(s);
if(info){
if(*start == info){
*start = info->next;
if(*start) (*start)->prior = NULL;
else *last = NULL;
}
else{
info->prior->next = info->next;
if(info!=*last)
info->next->prior = info->prior;
else
*last = info->prior;
}
free(info); /* devolve memoria para o sitema */
}
}

/* Encontra um endereço.*/

struct address *find(char *name)
{
struct address *info;

/* Salvar o arquivo em disco.*/
void save(void)
{
struct address *info;

FILE *fp;

fp = fopen("mlist","wb");
if(!fp){
printf("O arquivo nao pode ser aberto.\n");
exit(1);
}
printf("\nSalvando arquivo\n");

info = start;
while(info){
fwrite(info, sizeof(struct address),1,fp);
info = info->next; /*obtem proximo endereço */
}
fclose(fp);
}

/* Carregar o arquivo de endereço.*/

void load(void)
{
struct address *info;

FILE *fp;

fp = fopen("mlist","wb");
if(!fp){
printf("O arquivo nao pode ser aberto.\n");
exit(1);
}
/* libera qualquer memoria previamente alocada */
while(start){
info = start->next;
free(info);
start = info;
}
/* reinicializar os ponteiros de inicio e fim*/
start = last = NULL;

printf("\nloading file\n");
while(!eof(fp)){
info = (struct address *)malloc(sizeof(struct address));
if(!info){
printf("Sem Memoria");
return;
}
if(1!=fread(info, sizeof(struct address), 1, fp))break;
dls_store(info, &start, &last);
}
fclose(fp);
}
info = start;
while(info){
if(!strcmp(name, info->name)) return info;
info = info->next; /* obtem um novo endereço */
}
printf("Nome nao encontrado.\n");
return NULL;/* Nao encontrou */
}
/* mostra a lista completa. */

void list(void)
{
struct address *info;

info = start;
while(info){
display(info);
info = info->next; /* obtem proximo endereço */
}
printf("\n\n");
}
/* Essa função imprime os campos de cada endereço*/
void display(struct address *info)
{
printf("%s\n", info->name);
printf("%s\n", info->street);
printf("%s\n", info->city);
printf("%s\n", info->state);
printf("%s\n", info->zip);
printf("\n\n");
}
/* Procura por um nome na lista. */
void search(void)
{
char name[40];
struct address *info, *find();

printf("Insira o nome a procurar:");
gets(name);
info = find(name);
if(!info)
printf("Não encontrado\n");
else
display(info);
}



  


2. Re: problema na execuçao

André
andrezc

(usa Debian)

Enviado em 17/10/2010 - 15:32h

A etapa da adivinhação é a mais lenta na resolução dos problemas propostos aqui no fórum, ou seja, se não fosse essa etapa, a resolução do problema seria muito mais fácil. Se fosse descrito o objetivo do programa, o erro ocorrido, o que está imprimindo (caso esteja) e o que deveria imprimir. Se tivéssemos estes dados, seria muito mais fácil ajudar.


3. De fato!

Ezequias Rocha
Ezequias Rocha

(usa Ubuntu)

Enviado em 18/10/2010 - 07:35h

Gostaria que postasse o erro apontado pelo compilador ou o erro encontrado no momento da execução, bem como os objetivos deste programa. Outrossim, diga o que já fez para a resolução das dificuldades.


Embraces!


4. Re: problema na execuçao

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 20/10/2010 - 08:39h

gcc -o programa programa.c

Posta o que aparecer aqui.

Ah sim, e como é LDE:
http://www.vivaolinux.com.br/artigo/Linguagem-C-Listas-Duplamente-Encadeadas/






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts