Ir para conteúdo
Fórum Script Brasil
  • 0

Problema na utilização e exibição da fila


VitorPizzuto

Pergunta

Pessoal, preciso de uma ajudinha de vocês :/

Estou fazendo um programinha em C, no qual o usuário insere as informações do veículo, como: código, modelo e marca.

Depois de inserir os dados, ao digitar a opção para se exibir os veículos na fila, o código sai certo, porém as informações armazenadas na fila saem zeradas, o que será que está acontecendo? Aqui está o source code:

#include<stdio.h>
#include<stdlib.h>
#include <locale.h>

typedef struct type_car{
	int cod;
	char marca[20];
	char modelo[20];
	char cor[20];
}car;

car carro;

typedef struct Node{
	int num;
	struct Node *prox;
}node;

int tam;

int menu(void);
void opcao(node *FILA, int op);
void inicia(node *FILA);
int vazia(node *FILA);
node *aloca();
void insere(node *FILA);
node *retira(node *FILA);
void exibe(node *FILA);
void libera(node *FILA);

int main(void){
	node *FILA = (node *) malloc(sizeof(node));
	if(!FILA){
		printf("Sem memoria disponivel!\n");
		exit(1);
	}else{
	inicia(FILA);
	int opt;

	do{
		opt=menu();
		opcao(FILA,opt);
	}while(opt);

	free(FILA);
	return 0;
	}
}

int menu(void){
setlocale(LC_ALL, "Portuguese");
int choose;
	printf("\n\t\t\t\tEscolha a opção\n");
	printf("1 - Remover todos os carros\n");
	printf("2 - Exibir todos os carros na fila\n");
	printf("3 - Adicionar carro a fila\n");
	printf("4 - Remover carro da fila\n");
	printf("0 - Sair do programa\n");
	printf("\nOpção: ");
	scanf("%d", &choose);
	system("cls");

	return choose;
}

void opcao(node *FILA, int op){
	node *tmp;
	switch(op){
		case 0:
			libera(FILA);
			break;

		case 1:
			libera(FILA);
			inicia(FILA);
			break;

		case 2:
			exibe(FILA);
			break;

		case 3:
			insere(FILA);
			break;

		case 4:
			tmp= retira(FILA);
			if(tmp != NULL){
				printf("Carro removido: %3d\n\n", tmp->num);
				libera(tmp);
			}
			break;

		default:
			printf("Comando invalido!\n\n");
	}
}

void inicia(node *FILA){
	FILA->prox = NULL;
	tam=0;
}

int vazia(node *FILA){
	if(FILA->prox == NULL)
		return 1;
	else
		return 0;
}

node *aloca(){
	node *novo=(node *) malloc(sizeof(node));
	if(!novo){
		printf("Sem memória disponivel!\n");
		exit(1);
	}else{
	printf("Código do carro: ");
  	scanf("%d", &carro.cod);
  	fflush(stdin);
  	printf("Modelo do carro: ");
  	scanf("%s", &carro.modelo);
  	fflush(stdin);
  	printf("Marca do carro: ");
  	scanf("%s", &carro.marca);
	fflush(stdin);
  	printf("Cor do carro: ");
  	scanf("%s", &carro.cor);
  	fflush(stdin);
  	return novo;
	}
}

void insere(node *FILA){
	node *novo=aloca();
	novo->prox = NULL;

	if(vazia(FILA))
		FILA->prox=novo;
	else{
		node *tmp = FILA->prox;

		while(tmp->prox != NULL)
			tmp = tmp->prox;

		tmp->prox = novo;
	}
	tam++;
}


node *retira(node *FILA){
	if(FILA->prox == NULL){
		printf("Não a carros em espera!\n");
		return NULL;
	}else{
		node *tmp = FILA->prox;
		FILA->prox = tmp->prox;
		tam--;
		return tmp;
	}

}


void exibe(node *FILA){
	if(vazia(FILA)){
		printf("Sem carros!\n\n");
		return ;
	}

	node *tmp;
	tmp = FILA->prox;
	printf("Fila :");
	while( tmp != NULL){
		printf("%5d", tmp->num);
		tmp = tmp->prox;
	}
	printf("\n        ");
	int count;
	for(count=0 ; count < tam ; count++)
		printf("  ^  ");
	printf("\nOrdem:");
	for(count=0 ; count < tam ; count++)
		printf("%5d", count+1);


	printf("\n\n");
}

void libera(node *FILA){
	if(!vazia(FILA)){
		node *proxNode,
			  *atual;

		atual = FILA->prox;
		while(atual != NULL){
			proxNode = atual->prox;
			free(atual);
			atual = proxNode;
		}
	}
}

 

Alguém poderia me explicar o que fiz de errado e uma possível solução :)

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...