Ir ao conteúdo

Posts recomendados

Postado

Eu comecei a aprender C++ faz uns 2 meses, eu estava vendo uma das aulas e fazendo alguns códigos como sempre... 

Porém me deparei com um erro na parte do "while"... eu não soube dizer o que tinha de errado pois estava igual o do professor e o dele deu certo, mas o meu não.

------------------------------------------------

#include <iostream>
#include <locale.h>

//Protótipos das funções

 

void ExibirMenu();
int RetornarEscolha();
void ProcessarEscolha(int escolha);

 

//função principal
int main()
{
    ExibirMenu();
    system("PAUSE");
    return 0;
}

void ExibirMenu()
{
    setlocale(LC_ALL, "portuguese");
    
    do
    {
        std::cout << "*****Tickets Cinema*****" << "\n";
        std::cout << "\n1 - Para Meia Entrada\n";
        std::cout << "\n2 - Para Inteira\n";
        std::cout << "\n3 - Para Sair do Menu\n";
        std::cout << "\nDigite sua opção: ";
        
        ProcessarEscolha(RetornarEscolha());
    } 
    while (escolha != 3);
}

int RetornarEscolha()
{
    int escolha;
    std::cout << "\nDigite sua opção: ";
    std::cin >> escolha;
    return escolha;
}

void ProcessarEscolha(int TipoEscolha)
{
    switch (TipoEscolha)
    {
    case 1: std::cout << "\nMeia Entrada Adquirida!" << "\n";
        break;
    case 2: std::cout << "\nInteira Adquirida!" << "\n";
        break;
    case 3: std::cout << "\nSaindo do Menu... \n";
        break;
    default: std::cout << "\nOperação Inválida!\n";
    }
}

------------------------

desde já agradeço quem puder ajudar...

Postado

@Jules314 Como a variável escolha foi declarada na função RetornarEscolha, ela não está acessível a outras funções. Para ter acesso você pode mover a declaração para o início, publicamente fora da função,

 

#include <iostream>
#include <locale.h>

//Protótipos das funções

int escolha; 

void ExibirMenu();
int RetornarEscolha();
void ProcessarEscolha(int escolha); 

 

Postado
void ExibirMenu()
{
    setlocale(LC_ALL, "portuguese");

    do
    {
        std::cout << "*****Tickets Cinema*****" << "\n";
        std::cout << "\n1 - Para Meia Entrada\n";
        std::cout << "\n2 - Para Inteira\n";
        std::cout << "\n3 - Para Sair do Menu\n";
        std::cout << "\nDigite sua opção: ";

        ProcessarEscolha(RetornarEscolha());
    } while (escolha != 3);
}

Os autores e professores costumam definir herança, polimorfismo e encapsulamento como a base da programação orientada a objetos.

 

Empresas, escolas, autores e professores recomendam: nunca use variáveis globais. É sempre um problema e vai sempre dar problema. E vai contra o encapsulamento...

 

Repeti aqui essa construção curiosa de seu programa. Processar um menu é algo comum, como deve imaginar, mas raramente você vai ver

  • uma função de 3 linhas para retornar escolha, chamada sempre do mesmo lugar e só desse lugar
     
  • uma função chamada ExibirMenu() que também processa a escolha chamando ProcessarEscolha() com o argumento RetornarEscoha(), uma função, que como se sabe em geral retorna algo e nesse caso é um int.
     
    Citação

    Só que você inverteu os conceitos de retorno de função e argumento de função

ProcessarEscolha() não retorna nada.

 

O mais simples e legível é usar uma função Menu() declarada

int Menu();

por exemplo. E passar o retorno dela para a função ProcessarEscolha(). Algo assim

#include <iostream>
#include <locale.h>

int Menu();
int Processar(int);

int main()
{
    int escolha = 0;
    setlocale(LC_ALL, "portuguese");
    do
        Processar( escolha = Menu() );
    while (escolha!=3);
    system("PAUSE");
    return 0;
}

int Menu()
{
    int escolha = 0;
    std::cout << "*****Tickets Cinema*****" << "\n";
    std::cout << "\n1 - Para Meia Entrada\n";
    std::cout << "\n2 - Para Inteira\n";
    std::cout << "\n3 - Para Sair do Menu\n";
    std::cout << "\nDigite sua opção: ";
    std::cin >> escolha;
    return escolha;
};


int Processar(int op)
{
    switch (op)
    {
    case 1: std::cout << "\nMeia Entrada Adquirida!" << "\n";
        break;
    case 2: std::cout << "\nInteira Adquirida!" << "\n";
        break;
    case 3: std::cout << "\nSaindo do Menu... \n";
        return 0;
        break;
    default: std::cout << "\nOperação Inválida!\n";
        break;
    };
    return 1;
};

Já serviria

 

Evite funções que retornam void. Em geral é um desperdício. No mínimo uma condição de erro pode ser retornada.

 

setlocale()

 

Um programa de computador não é escrito em geral para rodar na máquina do autor. Claro que muitos programas de aluno e de hobbystas tem essa vida curta e estranha: são rodados muitas vezes apenas no IDE e assim que funcionam são esquecidos ou entregues à escola.

 

Mas você deve se acostumar a deixar as coisas como encontrou. setlocale() muda algo no computador que roda o programa e ao final você devia restaurar para deixar como estava antes. É o politicamente correto.

Para isso existe a função getlocale().

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!