c_cpp 在线阵中实现阵容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 在线阵中实现阵容相关的知识,希望对你有一定的参考价值。

// Arquivo teste.h
#define TAMANHO 5

/* Com as variaveis inicio e fim definidas no arquivo de cabeçalho 
  fora da struct, ficará mais claro e manipulavel o controle da fila*/

/*  Variaveis globais "inicio" e "fim", declaradas aqui, são por padrão iniciadas com 0,
  dispensando a necessidade de serem iniciadas em alguma outra parte do programa. */
extern int inicio, fim; 

typedef struct filme{
    char valor[20];
}Filme;

Filme filmes[TAMANHO];

/* Todo o vetor é referenciado por um unico ponteiro, 
desta forma, as modificacoes não vão precisar de retorno. */
void zerar(Filme *f, int idx);
void menu();
void adicionar(Filme *f);
void retirarFila(Filme *f);
void retirarPilha(Filme *f);
void imprimir(Filme *f);

//==================================================================================================================================
// Arquivo teste.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h>
#include "teste.h"

//função apenas para garantis que o vetor inicie sem lixo
void zerar(Filme *f, int idx){
	int i;
	for(i = idx; i < TAMANHO; i++){
		strcpy(f[i].valor, ""); 
	}
}

void menu(){ 
	system("cls");
        printf("1 - adicionar\n");
        printf("2 - retirar\n");
        printf("3 - imprimir\n");
        printf("4 - sair\n");
        printf("Digite a opcao: ");  
}

void adicionar(Filme *f){  
   if(fim == TAMANHO){  //Verifica se a fila já esta cheia, caso sim, impede de adicionar novos elementos
	printf("Fila Cheia\n");
	system("PAUSE");
	return;
   }else{
	printf("Digite a string: ");
	char filme[20];
    	getchar();
    	scanf("%[^\n]", filme);   
    	strcpy(f[fim].valor, filme);
    	fim++;
    }
}

void retirarFila(Filme *f){ //Implemtação para fila
	if(fim == 0){
         printf("Fila vazia\n");
	 zerar(f, 0); //Garantir a limpeza do vetor
	}else{
		int i;
		printf("Retirada a string %s da fila\n", f[inicio].valor);
		for(i = inicio; i < fim -1; i++){  //Ajustar o vetor para não ficar com espaços vazios
			f[i] = f[i + 1];
		}
		fim--;
		zerar(f, fim);
		imprimir(f);
	}
}

void retirarPilha(Filme *f){ //Implementação para pilha, muda apenas a chamada para essa função	
    if(fim <= 0){
	   printf("Fila vazia\n");
	   zerar(f, 0); //Garantir a limpeza do vetor
	}else{
       printf("Retirada a string %s da pilha\n", f[fim-1].valor);	   	
	   strcpy(f[fim-1].valor, "");
	   fim--;
	   imprimir(f);	
   }   	
}

void imprimir(Filme *f){
    if(fim == 0){
		printf("Fila Vazia\n");
	}else{
		int i;
		for(i = inicio; i < fim; i++ ){
			printf("%s\n", f[i].valor);
		}
	}
}
//=====================================================================================================================================
//Arquivo main
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "teste.h"

int inicio, fim;

int main(){
    
    zerar(filmes, 0);
    
    int opcao = 0;
	
    while(opcao != 4){
    	system("cls");
        menu();
        scanf("%d", &opcao);
        
        switch(opcao){
        case 1:
            adicionar(filmes);      		
            break;
        case 2:        	
            retirarFila(filmes);
            system("PAUSE");
            break;
        case 3:
            imprimir(filmes);
            system("PAUSE");
            break;
        case 4:
        	printf("Encerrando o sistema\n");
        	break;
        default:
        	printf("Opcao invalida!\n");
        	getch();
        	break;		              
        }
    }
    system("PAUSE");	
    return 0;
}

以上是关于c_cpp 在线阵中实现阵容的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 在c中实现sizeof

c_cpp 在cpp中实现可变字符串

c_cpp 在c中实现sha256的原型

c_cpp 尝试在React Native iOS中实现后台任务

c_cpp 要求在C中实现的问题,使用基于字符的答案

javaweb中实现在线人数统计