Ir ao conteúdo
  • Cadastre-se

C++ Bom estou com uma dificuldade para chamar o primeiro de uma fila


Epidemia08

Posts recomendados


Basicamente preciso chamar o primeiro da fila (sendo que é uma fila Pac e uma Sedex), mas quando chamo la no menu ele chama todos de uma fila só. 
 

 

#include <iostream>
#include <queue>

using namespace std;

struct pessoa{
	string nome, rua, cidade, cep;
	int  numero;
  int frente;
};

void imprimir(queue<pessoa> fila){
	if(fila.empty()){
		cout << "Fila vazia\n";
		return;
	}		
	while(!fila.empty()){
		cout << "PAC - " << fila.front().nome << " - " << fila.front().cep << " - " << fila.front().rua << " - " << fila.front().numero << " - " << fila.front().cidade << endl;
		fila.pop();
	}
	cout << endl;
}

void imprimir1(queue<pessoa> fila){
	if(fila.empty()){
		cout << "Fila vazia\n";
		return;
	}		
	while(!fila.empty()){
		cout << "Sedex - " << fila.front().nome << " - " << fila.front().cep << " - " << fila.front().rua << " - " << fila.front().numero << " - " << fila.front().cidade << endl;
		fila.pop();
	}
	cout << endl;
}


void chamarProximo(queue<pessoa> filaPac){
  int pri = 0;
  
  if(filaPac.empty()){
		cout << "Fila vazia\n";
    
		return;
	}		
	
	while(!filaPac.empty()  ){
    
    
      cout << "Fila PAC ->"  << filaPac.front().nome << " - " << filaPac.front().rua <<  " - " << filaPac.front().numero << " - " << filaPac.front().cep << " - " << filaPac.front().cidade;
      //filaPac.pop();
    
        
	}

	cout << endl;
}

void chamarProximo1(queue<pessoa> filaSedex){
	
	while(!filaSedex.empty() ){
		cout << "Fila Sedex ->"  << filaSedex.front().nome << " - " << filaSedex.front().rua <<  " - " << filaSedex.front().numero << " - " << filaSedex.front().cep << " - " << filaSedex.front().cidade;
        filaSedex.pop();
	}
	cout << endl;
}





void inserir(queue<pessoa> &fila, string nome, string cep,int numero , string rua, string cidade){
	pessoa p1;
	p1.nome = nome;
	p1.cep = cep;
	p1.numero = numero;
  p1.rua = rua;
  p1.cidade = cidade;
  
	fila.push(p1);
  
  
}

int main() {
  queue<pessoa> filaPac;
  queue<pessoa> filaSedex;
  queue<pessoa> fila;
	int op;
  int op2;

  do{
cout << "\n1- Adicionar pessoas na fila. \n";
    cout << "2- Chamar próximo da fila, informando a fila correspondente. \n";
    cout << "3- Mostrar as filas. \n";
    cout << "4- Sair.";
    cout << "\nOpção: \n";
    cin >> op2;

    switch(op2){

      case 1:
      {
        

       cout << "\nESCOLHA O TIPO DE SERVIÇO PARA ENVIO\n";
     cout << "\n1- PAC. \n ";
     cout << "2- Sedex. \n";
     cout << "Opção: \n";
     cin >> op;

     switch(op){


       case 1:
      {
        string nome, cidade, rua, cep;
        int numero;
        cout << "\nDigite o nome: \n";
        cin >> nome;

        cout << "\nDigite a rua: \n";
        cin >> rua;

        cout << "\nDigite o numero: \n";
        cin >> numero;

        cout << "\nDigite o cep: \n";
        cin >> cep;

        cout << "\nDigite a cidade: \n";
        cin >> cidade;
         inserir(filaPac, nome, cep, numero, rua, cidade);
        cout << endl;
        

      }
        
      break;

      case 2:
      {
      string sedex, nome, cidade, rua, cep;
        int numero;
         
        cout << "\n Digite o nome: \n";
        cin >> nome;

        cout << "\nDigite a rua: \n";
        cin >> rua;

        cout << "\nDigite o numero: \n";
        cin >> numero;

        cout << "\nDigite o cep: \n";
        cin >> cep;

        cout << "\nDigite a cidade: \n";
        cin >> cidade;
         inserir(filaSedex, nome, cep, numero, rua, cidade);
        cout << endl;
        

      }

      break;

      
      
      
      

     } //case1op2

     break;

    case 2:
    
    {
     //chamaroproximodafila
      
               
                 

      
      
        
      
      

    }
    break;
}//switchop
    case 3:
    {
      imprimir(filaPac);
      imprimir1(filaSedex);
    }
    break;

    case 4:
    {
      cout << "saindo...";
    }


    } //switchop2
      
      

    

  }while(op2 != 0);
    
}
  

  



  
	

	



  

  

  
    

    
 

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

Seu programa pode melhorar em muitas partes :(

 

É praticamente um programa em C. C++ é uma linguagem muito mais expressiva. Aproveite a linguagem, ou use C.

 

De volta ao seu programa

 

  • Use nomes mais expressivos, e evite void
    void chamarProximo(queue<pessoa> filaPac)
    void chamarProximo1(queue<pessoa> filaSedex)

 

??? porque não 
 

    void chamarPAC(queue<pessoa> filaPac)
    void chamarSEDEX(queue<pessoa> filaSedex)

 

Ou o simples
 

    int chamar(queue<pessoa> fila);

 

Já que as filas são da mesma coisa?

 

  • sobre chamarProximoxxx
void chamarProximo1(queue<pessoa> filaSedex)
{
    while (!filaSedex.empty())
    {
        cout << "Fila Sedex ->" << filaSedex.front().nome << " - "
             << filaSedex.front().rua << " - "
             << filaSedex.front().numero << " - "
             << filaSedex.front().cep << " - "
             << filaSedex.front().cidade;
        filaSedex.pop();
    }
    cout << endl;
}

 

o próximo é o próximo. UM próximo cliente se a fila não estiver vazia. Que pretende com o loop? É claro que vai esvaziar a fila.

 

  • nunca escreva um programa interativo. Só vai perder tempo. Não misture as coisas. Suas filas são de Pessoa. Escreva as funções em torno dos dados e não em torno de cin / cout ou vai levar dias pra fazer um programa de 15 minutos.

Exemplo: inserir alguém na fila. Está usando C++. Devia usar uma classe com as filas. De todo modo pense nessa função
 

	int inserir( Pessoa& p, Fila& f);

 

que retorna 0 se deu certo ou um código indicando um possível erro. E insere uma Pessoa numa Fila, que é o que quer fazer. E Fila seria o que? uma queue<Pessoa>...E compare com isso
 

void inserir(
    queue<pessoa> &fila, string nome, string cep, int numero,
    string rua, string cidade)

 

Como você escreveu tem que escrever MUITO mais, é mais difícil de ler. E se mudar um campo na classe (struct) tem que alterar o programa todo... Nunca escreva assim. Isso é encapsulamento. Usa a estrutura como parâmetro e os campos vão dentro. É mais esperto.,

 

  • main() deve ser a primeira função de seu programa. Se possível em um arquivo separado.

 

    do {
        cout << "\n1- Adicionar pessoas na fila. \n";
        cout << "2- Chamar próximo da fila, informando a fila "
                "correspondente. \n";
        cout << "3- Mostrar as filas. \n";
        cout << "4- Sair.";
        cout << "\nOpção: \n";
        cin >> op2;

 

  • Não escreva programas com menu. Escreva e teste seu programa. Depois coloque isso em minutos.
  • E se vai usar um menu escreva uma função que retorna a opção....
  • e entenda que 5 cout de 1 linha é muito menos claro que um cout de 5 linhas...

    Não escreva assim:
     
            cout << "\n1- Adicionar pessoas na fila. \n";
            cout << "2- Chamar próximo da fila, informando a fila "
                    "correspondente. \n";
            cout << "3- Mostrar as filas. \n";
            cout << "4- Sair.";
            cout << "\nOpção: \n";

          Prefira:
 

        cout << "\n\
1- Adicionar pessoas na fila.\n\
2- Chamar próximo da fila, informando a fila\n\
   correspondente.\n\
3- Mostrar as filas.\n\
4- Sair.\n\
\n\
   Opção: ";

 

  • Não há razão para um espaço em branco antes de mudar de linha :)
  • Não mude de linha depois de "Opção: ". Sempre se espera o prompt na MESMA linha da leitura da resposta
  • é claro que um cout é melhor que 5. Alguém vai pagar a conta
  • use uma função e retorne um char com a opção
  • provavelmente não precisa de um ponto ao final de cada linha: as opções são pré-fixadas por um número
  • é muito mais fácil editar e alinhar o texto do modo como mostrei
  • tem muito menos chance de erro

 

 

Lembro também que imprimir() é algo enjoado para uma estrutura dessas. Em geral filas, pilhas, conjuntos, mapas e listas NÃO tem essa função. E só se usa em testes. Usando <queue>  por exemplo você acessa pela ordem. Pode ver o primeiro ou o último elemento. Não é pra ver os do meio. Não é para isso a fila. Essa estrutura reforça exatamente a disciplina de tirar e por os caras em ordem, FIFO ou LIFO, fila ou pilha.

 

Para mostrar o conteúdo E usar essa estrutura o mais simples é usar size() e colocar os caras de volta ao final da fila depois de mostrar. Ou usar  vector ao invés de queue

  • Curtir 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!