Ir ao conteúdo

C Dificuldade em completar exercício em C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

 

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");
}

 

 

  • Solução
Postado

@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

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...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!