Fila dinâmica - problema nao função remover

1. Fila dinâmica - problema nao função remover

Rai Fagundes Saraiva
rai_saraiva

(usa Outra)

Enviado em 28/06/2011 - 12:55h

Estou com um problema em remover o primeiro termo, se poder me ajudar aqui vai o programa:

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

#define BUFFER 64

typedef struct lista {
char *nome;
int nota_1, nota_2;
struct lista *proximo;
} Dados;

Dados *inicia_dados(char *nome, int nota_1, int nota_2);
Dados *insere_dados(Dados *dados, char *nome, int nota_1, int nota_2);
void exibe_dados(Dados *dados);
Dados *deleta_p_dados(Dados *dados);
Dados *deleta_dados(Dados *dados);
int checa_vazio(Dados *dados);

void insere(void);
void exibe(void);
void deleta(void);

Dados *principal = NULL;

Dados *inicia_dados(char *nome, int nota_1, int nota_2) {

Dados *novo;

novo = (Dados *)malloc(sizeof(Dados));
novo->nome = (char *)malloc(strlen(nome)+1);
strncpy(novo->nome, nome, strlen(nome)+1);
novo->nota_1 = nota_1;
novo->nota_2 = nota_2;
novo->proximo = NULL;

return novo;
}

Dados *insere_dados(Dados *dados, char *nome, int nota_1, int nota_2) {

Dados *novo;

novo = (Dados *)malloc(sizeof(Dados));
novo->nome = (char *)malloc(strlen(nome)+1);
strncpy(novo->nome, nome, strlen(nome)+1);
novo->nota_1 = nota_1;
novo->nota_2 = nota_2;
novo->proximo = dados;

return novo;
}

void exibe_dados(Dados *dados) {

fprintf(stdout, "**********Cadastro:**********\n\n");

fprintf(stdout, "------------------------\n");

for (; dados != NULL; dados = dados->proximo) {
fprintf(stdout, "Nome: %s\n", dados->nome);
fprintf(stdout, "Nota 1: %d\n", dados->nota_1);
fprintf(stdout, "Nota 2: %d\n", dados->nota_2);
fprintf(stdout, "------------------------\n");
}

getchar();
}

Dados *deleta_dados(Dados *dados) {

Dados *novo;

novo = dados->proximo;

free(dados->nome);
free(dados);

fprintf(stdout, "\nO ultimo registro inserido foi deletado com sucesso.\n");
sleep(1);

return novo;
}

int checa_vazio(Dados *dados) {

if (dados == NULL) {
fprintf(stdout, "\nLista vazia!\n");
sleep(1);
return 1;
} else
return 0;
}

void insere(void) {

char *nome;
int nota_1, nota_2;

nome = (char *)malloc(BUFFER);

fprintf(stdout, "\n\nDigite o Nome: ");
scanf("%s", nome);
fprintf(stdout, "\n");

fprintf(stdout, "Digite a Nota 1: ");
scanf("%d", ¬a_1);
fprintf(stdout, "\n");

fprintf(stdout, "Digite a Nota 2: ");
scanf("%d", ¬a_2);
fprintf(stdout, "\n");

if (principal == NULL)
principal = inicia_dados(nome, nota_1, nota_2);
else
principal = insere_dados(principal, nome, nota_1, nota_2);
}

void exibe(void) {

if (!checa_vazio(principal))
exibe_dados(principal);
}

/*void deleta(void) {

char escolha_2;
fprintf(stdout, "\n************************\n");
fprintf(stdout, "Escolha uma opcao para deletar: \n");
fprintf(stdout, "1 - Deletar o primeiro dado\n");
fprintf(stdout, "2 - Deletar o ultimo dado\n");
fprintf(stdout, "3 - Sair\n\n");
fprintf(stdout, "\n************************\n");

scanf("%c", &escolha_2);

fprintf(stdout, "\n************************\n");

switch(escolha_2) {
case '1':
if (!checa_vazio(principal))
principal = deleta_p_dados(principal);
break;

case '2':
if (!checa_vazio(principal))
principal = deleta_dados(principal);
break;

case '3':
exit(0);
break;
}
}*/

void deleta(void) {
if (!checa_vazio(principal))
principal = deleta_dados(principal);
}

int main(void) {

char escolha_1;

do {
fprintf(stdout, "\n************************\n\n");
fprintf(stdout, "Cadastro de Pessoas\n\n");
fprintf(stdout, "Escolha uma opcao: \n");
fprintf(stdout, "1 - Insere Dados\n");
fprintf(stdout, "2 - Exibe Dados\n");
fprintf(stdout, "3 - Deleta Dados\n");
fprintf(stdout, "4 - Sair\n");
fprintf(stdout, "\n************************\n");

scanf("%c", &escolha_1);

fprintf(stdout, "\n************************\n");

switch(escolha_1) {
case '1':
insere();
break;

case '2':
exibe();
break;

case '3':
deleta();
break;

case '4':
exit(0);
break;

default:
fprintf(stderr,"Digite uma opcao valida!\n");
sleep(1);
break;
}

getchar();
}

while (escolha_1 > 0);

return 0;
}



  


2. oxi

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 07/07/2011 - 10:43h

Então.. coloquei algumas entradas, deletei algumas e coloquei outras e no final funcionou perfeitamente.

Você poderia me dizer aonde está o problema ou quando ele aparece??

t+






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts