Ir ao conteúdo
  • Cadastre-se

C Dificuldade em completar exercício em C


AnderJack
Ir à solução Resolvido por devair1010,

Posts recomendados

 

Bom dia!

Não estou conseguindo esvaziar a fila na "void esvaziar_fila()". 

Quando utilizo a opção de esvaziar a fila parece que esvazia mas os dados seguem impressos e não somem.

Travei legal...🤯🤯🤯 

 

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

//Constante que define o tamanho máximo da estrutura de dados
#define tamanho 5

//Declaração do tipo_fila: estrutura de dados
struct tinformacoes{
	char ra_aluno[10];
	char arq[10];
	char ext_arq[10];
	char matri_prof[10];
};

struct tfila{
	struct tinformacoes dados[tamanho];
	int ini;
	int fim;
};
//Variaveis globais
struct tfila fila;
struct tinformacoes informações;
int op;

//Prototipação
void fila_entrar();
void fila_sair();
void fila_mostrar();
void menu_mostrar();
void esvaziar_fila();

int main (){
	setlocale(LC_ALL, "portuguese");
	op = 1;
	fila.ini = 0;
	fila.fim = 0;
	while (op != 0) {
		system("cls");
		fila_mostrar();
		menu_mostrar();
		scanf("%d", &op);
		switch (op) {
			case 1:
				fila_entrar();
				fflush(stdin);
			break;
			case 2:
				fila_sair();
				fflush(stdin);
			break;
			case 3:
				esvaziar_fila();
				fflush(stdin);
			break;
			default:
				printf("===OPÇÃO INVÁLIDA!=== \n");
				system("pause");
				break;
		}
		
	}
	return(0);
}

//Adicionar um elemento no final da Fila
void fila_entrar(){
	if (fila.fim == tamanho){
		printf("\nA fila está cheia!\n\n");
		system("pause");
	}
	else{
		printf("\nDigite o RA do aluno: ");
		scanf("%s", &fila.dados[fila.fim].ra_aluno);
		fflush(stdin);
		printf("\nDigite o nome do arquivo: ");
		scanf("%s", &fila.dados[fila.fim].arq);
		fflush(stdin);		
		printf("\nDigite a extensão do arquivo: ");
		scanf("%s", &fila.dados[fila.fim].ext_arq);
		fflush(stdin);		
		printf("\nDigite a matrícula do professor: ");
		scanf("%s", &fila.dados[fila.fim].matri_prof);
		fflush(stdin);
		system("cls");
		fila.fim++;

		
	}
}

void fila_sair(){
	if (fila.ini == fila.fim){
		printf("\nA fila está vazia!\n\n");
		system("pause");
		system("cls");
	}
	else{
		int i;
		for (i = 0; i < tamanho; i++){
		fila.dados[i] = fila.dados[i+1];
		}
		fila.dados[fila.fim];
		fila.fim--;
	}

}
	
void esvaziar_fila(){
	if (fila.fim == fila.ini){
		printf("\nA fila está vazia!\n\n");
		system("pause");
	}
	else{
		while (fila.ini != fila.fim){
		fila.fim--;
		}
		system("cls");
}
}

void fila_mostrar(){
	int i;
	printf("");
	for (i = 0; i < tamanho; i++) {
		printf("RA do aluno: %s \n", fila.dados[i].ra_aluno);
		printf("Nome do arquivo: %s \n", fila.dados[i].arq);
		printf("Ext. Arquivo: %s \n", fila.dados[i].ext_arq);
		printf("Matrícula do professor: %s \n", fila.dados[i].matri_prof);
		printf("------------------------------\n");
	}
	printf("\n\n");
}


void menu_mostrar(){
		printf("========SISTEMA ACADÊMICO========\n");
		printf("\n");
		printf("1 - Inserir um elemento na fila\n");
		printf("2 - Remover um elemento da fila\n");
		printf("3 - Esvaziar a fila\n");
		printf("4 - Encerrar o programa\n");
		printf("\n");
		printf("Escolha uma opção\n");
}

 

 

Link para o comentário
Compartilhar em outros sites

  • Solução

@AnderJack     você colocou a variável tamanho no loop de mostrar a fila , e a variável fim se daria melhor nessa situação ,  e usar locale.h para acentuações não costuma funcionar bem em outros pc que não seja o seu , então melhor não usa-la , e também nomes das variáveis não pode ter acentos , e seu código modificado poderia ser assim  :

#define _CRT_SECURE_NO_WARNINGS  // para usar scanf e outras funções no VisuaL Studio
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <locale.h>
#include <string.h>
//Constante que define o tamanho máximo da estrutura de dados
#define tamanho 5
//Declaração do tipo_fila: estrutura de dados
struct tinformacoes
{
    char ra_aluno[10];
    char arq[10];
    char ext_arq[10];
    char matri_prof[10];
};
struct tfila
{
    struct tinformacoes dados[tamanho];
    int ini;
    int fim;
};
//Variaveis globais
struct tfila fila;
struct tinformacoes informações;
int op;
//Prototipação
void fila_entrar();
void fila_sair();
void fila_mostrar();
void menu_mostrar();
void esvaziar_fila();
int main()
{
    setlocale(LC_ALL, "portuguese");
    op = 1;
    char c;
    fila.ini = 0;
    fila.fim = 0;
    fila_mostrar();
    while (op != 0)
    {
        system("cls");
        menu_mostrar();
        op = _getch() - 48; // não precisa pressionar ENTER
        printf(" %d\n", op);
        system("cls");
        switch (op)
        {
        case 0:
            printf("\n\n\n\t\tSaindo Do Pro gRamah . . . !\n\n\n");
            break;
        case 1:
            fila_entrar();
            break;
        case 2:
            fila_sair();
            break;
        case 3:
            esvaziar_fila();
            break;
        case 4:
            fila_mostrar();
            break;
        default:
            printf("===  OPCAO INVALIDA . . . !   ===\n");
            system("pause"); 
        }
    }
  return(0);
}
//Adicionar um elemento no final da Fila
void fila_entrar()
{
    char c;
    printf("\n");
    if (fila.fim == tamanho)
    {
        printf("\nA fila esta cheia!\n\n");
        system("pause");
    }
    else
    {
        printf("Digite o RA do aluno -------------: ");
        scanf("%s", &fila.dados[fila.fim].ra_aluno);
        while (c = fgetc(stdin) != '\n');               // limpar o buffer do teclado
        printf("Digite o nome do arquivo ---------: "); 
        scanf("%s", &fila.dados[fila.fim].arq);
        while (c = fgetc(stdin) != '\n');               // limpar o buffer do teclado
        printf("Digite a extencao do arquivo -----: ");
        scanf("%s", &fila.dados[fila.fim].ext_arq);
        while (c = fgetc(stdin) != '\n');               // limpar o buffer do teclado
        printf("Digite a matricula do professor --: ");
        scanf("%s", &fila.dados[fila.fim].matri_prof);
        while (c = fgetc(stdin) != '\n');               // limpar o buffer do teclado
        fila.fim++;
    }
}
void fila_sair()
{
    if (fila.ini == fila.fim)
    {
        printf("\nA fila esta vazia!\n\n");
        system("pause");
    }
    else
    {
        int i;
        for (i = 0; i < tamanho; i++)
        {
            fila.dados[i] = fila.dados[i + 1];
        } 
        fila.fim--;
    }
}
void esvaziar_fila()
{
    if (fila.fim == fila.ini)
    {
        printf("\nA fila esta vazia!\n\n");
        system("pause");
    }
    else
    {
        fila.fim = fila.ini; // isso resolve
    }
}
void fila_mostrar()
{
    int i;
    printf("\n");
    if (!fila.fim)
        printf("Nao Tem nada Arm AzenadO Aqui . . . !\n");
    for (i = 0; i < fila.fim; i++)
    {
        printf("RA do aluno ------------: %s \n", fila.dados[i].ra_aluno  );
        printf("Nome do arquivo --------: %s \n", fila.dados[i].arq       );
        printf("Ext. Arquivo -----------: %s \n", fila.dados[i].ext_arq   );
        printf("Matricula do professor -: %s \n", fila.dados[i].matri_prof);
        printf("-------------------------------------------------------\n");
    }
    printf("\t\tTecle . . . !\n");
    _getch();
    printf("\n\n");
}
void menu_mostrar()
{
    printf("========  SISTEMA ACADEMICO  ========\n\n");
    printf("0 - Encerrar o programa\n"                );
    printf("1 - Inserir um elemento na fila\n"        );
    printf("2 - Remover um elemento da fila\n"        );
    printf("3 - Esvaziar a fila\n"                    );
    printf("4 - mostrar fila\n\n"                     );
    printf("Escolha uma opcao "                       );
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!