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 :)
Pergunta
VitorPizzuto
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
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.