Jump to content
Fórum Script Brasil
  • 0

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


VitorPizzuto
 Share

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...