Jump to content

Erro em inserir em memoria dinamica e listar dados


Copa_7
 Share

Recommended Posts

O que se passa é o seguinte, é um trabalho para gerir um restaurante e pretendo activar empregados guardados num ficheiro e inserir em memoria dinamica, mas quando vou a listar todos os empregados activos so me imprime um e nao sai do mesmo.

a estrutura do empregado é a seguinte:

typedef struct empregado empr, *pempr;
struct empregado{
char nome[100];
int id, mes_ser; //mesas servidas Mesas
float fact_total; //facturacao total
int mesas_serv;  //num mesas a servir actualmente
pempr prox;
}empr_temp,empr_temp2;

a funcao para activar empregado é a seguinte:

pempr activar_emp(pempr p,empr * empr_temp)
{
FILE * femp;
pempr novo;
int num,env;

printf("Numero de empregado a ser activado:\n");
scanf("%d",&num);

novo=p;

if((femp=fopen("emp.dat","rb"))==NULL)
{
	printf("ERRO AO ABRIR FICHEIRO emp.dat!!\n");
	return p;
}

while(fread(empr_temp,sizeof(empr),1,femp)==1) //enquanto houver dados para ler
{
		printf("\nPOSICAO=%d",ftell(femp));
		printf("\nPrimeiro ID: %d",empr_temp->id);
		printf("\nNome= %s",empr_temp->nome);
		if(empr_temp->id==num) //se o id for igual ao procurado
		{
			printf("\nID: %d",empr_temp->id);
			if((novo = malloc(sizeof(empr)))==NULL) //aloca memoria para estrutura
			printf("Erro na alocacao!!");
			else{
			novo=empr_temp; //foi encontrado, entao copia a estrutura para novo
			novo->mesas_serv=0;
			novo->prox=p; // é inserido no inicio da lista
			printf("\nAntigo primeiro na lista: %s!!",novo->prox->nome);
			p=novo; //p volta a ser o inicio da lista
			printf("\nO empregado %s foi activado com sucesso!",p->nome);
			fclose(femp);
			return p;
			}
	}
}
printf("\nO numero de empregado nao existe!");
}

e a funcao para listar os empregados activos é:

void listar_emp_act(pempr p)
{
pempr actual;
system("cls");

        actual=p;
while(actual!=NULL) //enquanto não chegar ao final da lista
{
	printf("***********EMPREGADO %d***********\n",actual->id);
	printf("Nome: %s\n",actual->nome);
	printf("ID: %d\n",actual->id);
	printf("Mesas a servir actualmente: %d\n",actual->mesas_serv);
	actual=actual->prox; //passa ao proximo na lista
	getch();
}
}

na funcao main:

void main()
{
...
pempr lista_emp_act=NULL;
...
listar_emp_act(lista_emp_act);
...
lista_emp_act=libertar_emp(lista_emp_act);
...
}

Nao liguem a alguns printf porque foi so para testar, mas alguem consegue dar uma vista de olhos nisto? Ja ando todo o dia à procura do erro mas nada!

cumprimentos

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.