1 – 13 de 13
Blogger augustowebd disse...

Olá, em primeiro lugar, parabéns pelo excelente trabalho.

Analisando o código, fiquei na dúvida se na opção 4 do case, "retirar", onde se lê:

"
if(tmp != NULL){
printf("Retirado: %3d\n\n", tmp->num);
libera(tmp);
}
"

Não deveria ser:


"
if(tmp != NULL){
printf("Retirado: %3d\n\n", tmp->num);
libera(tmp);
}
"

?

Mais uma vez, parabéns!

26 de fevereiro de 2015 às 08:42

Blogger Frank disse...

Olá! O código está dando bug. Depois que retiro um elemento é peço pra exibir, entra em loop infinito. Tentei várias maneiras de corrigir esse bug mas não consigo, ainda tenho dificuldade pra lidar com ponteiros. Parabéns, ótima matéria

4 de março de 2015 às 20:17

Blogger Unknown disse...

respondendo a duvida do que Frank disse, não sou especialista só curioso ao bug que ele referiu sofre o loop infinito quando ele retira um elemento e exibe a lista, eu resolvi dessa maneira setei null e liberei a memoria de temp

tmp->prox =NULL;
free(tmp->prox);

21 de abril de 2015 às 11:30

Blogger Carlos disse...

Excelente apostila. Quem dera os professores fossem tão claros. Parabéns!

Uma pequena correção:

em case 4, trocar libera(tmp) por free(tmp).

Abraços e estou esperando o conteúdo sobre árvores.

14 de maio de 2015 às 12:16

Blogger kinhopr disse...

frank

e só vc ignorar a linha Libera(tmp);

comenta ela e o programa roda blz
//libera(tmp);

if(tmp != NULL){
printf("Retirado: %3d\n\n", tmp->num);
libera(tmp);
}

17 de maio de 2015 às 14:16

Blogger Junio disse...

Meu programa não está a mostrar o nome nem a idade! Me ajudem ...


//FirstInFirstOut

#include
#include

typedef struct fila{
int valor;
struct fila *prox;
} dados;


void insere();
void retira();
void mostra();
void erro();

dados *frente = NULL;
dados *cauda = NULL;

main(){
char escolha;
system("cls");

do{
printf("\nMetodo Fila\n\n");
printf("Escolha uma opcao: \n");
printf("\t1 - Inserir valores na Fila\n");
printf("\t2 - Remover valores da Fila\n");
printf("\t3 - Mostrar valores da Fila\n");
printf("\t9 - Sair\n\n");
printf("Resposta: ");
scanf("%c", &escolha);
switch(escolha) {
//Inserir
case '1':
insere();
break;
//retirar
case '2':
if(frente!=NULL){
retira();
}
else{
printf("\nA Fila esta vazia!\n");
fflush(stdin);
}
break;
//Mostra
case '3':
if(frente!=NULL){
mostra();
}
else{
printf("\nA Fila esta vazia!\n");
fflush(stdin);
}
break;
case '9':
printf("\nObrigado por utilizar esse programa!\n");
exit(0);
break;
//Erro
default:
erro();
break;
}
fflush(stdin);
}
while (escolha > 0);

}

void insere(){
char nome;
int idade;
system("cls");
printf("Insira o nome: ");
scanf("%s",&nome);
printf("Insira a idade: ");
scanf("%d",&idade);
dados *novo = (dados*)malloc(sizeof(dados));
novo -> valor=nome;
novo -> prox=NULL;
if(frente == NULL){
frente = cauda = novo;
}
else{
cauda ->prox=novo;
cauda=novo;
}

fflush(stdin);
}






void retira(){
dados *aux;
system("cls");
printf("\nExclusao: \n");
printf("--------------------------------------\n");
aux=frente->prox;
free(frente);
frente=aux;
printf("\nValor excluido!\n");
printf("--------------------------------------");
fflush(stdin);
}


void mostra(){
int posicao=0;
system("cls");
dados *novo=frente;
printf("\nMostrando valores: \n");
printf("--------------------------------------\n");
for (; novo != NULL; novo = novo->prox) {
posicao++;
printf("Posicao %d, contem o nome %s e a idade %d \n", posicao, novo->prox, novo->prox);
}
printf("--------------------------------------");

fflush(stdin);
}






void erro(){
system("cls");
printf("\nErro de Digitacao: \n");
printf("--------------------------------------\n");
printf("\nDigite uma opçao valida (pressione -Enter- p/ continuar)!\n\n");
printf("--------------------------------------");
fflush(stdin);
}

7 de outubro de 2015 às 02:50

Blogger Bertolai disse...

Olá a todos eu resolvi esse problema trocando libera(tmp); por free(tmp);

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

free(tmp); //antiga linha libera(tpm);

}
break;

6 de junho de 2016 às 17:01

Blogger Unknown disse...

Por gentileza, poderia ser escrito a função para inverter a fila? Pois estou precisando na faculdade e usei esse código fonte como exemplo.

18 de agosto de 2016 às 19:58

Blogger Unknown disse...

Pra mim que sou bem leigo ... pois estou no segundo semestre de Analise e Desenvolvimento de Sistemas, seria bem interessante se cada linha de codigo tivesse um //comentário .. explicando o que o codigo faz.

24 de outubro de 2016 às 15:25

Blogger Unknown disse...

Muito obrigada pela explicação detalhada seguido do código, foi super esclarecedor!

Sucesso!

1 de maio de 2018 às 15:39

Blogger Russano disse...

quando vou adicionar elemento na fila o programa entra em loop. Como resolver?

26 de novembro de 2020 às 15:49

Anônimo Anônimo disse...

Estou tentando usar esse codigo,mas preciso de colocar os dados da fila uma abaixo do outro,e os dados tbm sao diferentes!
ex: fila:123456
arq.jpg
cod.123
......
......
tipo isso ai!

19 de maio de 2021 às 18:11

Anônimo Anônimo disse...

como fazer para inserir nome de pessoa ao inves de numeros na fila?

8 de novembro de 2022 às 22:43

É quase impossível criar centenas de páginas voltadas para programação C e não cometer algum erro.

- Se notar algum conceito, letra ou trecho de código errado, deixe sua correção

- Se perceber uma maneira melhor ou mais eficiente de fazer algo, deixe sua ideia

- Se algo não ficar claro ou for confuso, nos avise

Aos poucos vamos aumentando e melhorando a qualidade de nosso material, e para isso contamos com sua ajuda.
Você pode usar algumas tags HTML, como <b>, <i>, <a>

A moderação de comentários foi ativada. Todos os comentários devem ser aprovados pelo autor do blog.

Depois de enviar seu comentário, será necessário fazer login.
Prove que você não é um robô