Ir ao conteúdo

Posts recomendados

Postado

Olá, gostaria de uma ajuda em listar o os produtos em um estoque em ordem alfabética pelo nome. Alguém poderia me ajudar. Código abaixo.

#include<iostream>
#include<string.h>
#include<stdlib.h>

using namespace std;

int escolha,cont,cadastro = 0;

struct produto{
char nome[100];
char tipo[50];
double valor;
char local_estoque[50];
char identificador_produto[10];
long int quantidade_estoque;
};

struct produto x[100];

struct produto informacoes_produto(){
char nproduto[20];
char vproduto[20];
cout<<"-> Adicao de Produtos ao Estoque"<<endl;
cout<<endl;
cadastro_erro:
cout<<"NOME DO PRODUTO:"<<endl;
cin>>x[cadastro].nome;
cout<<"TIPO DE PRODUTO:"<<endl;
cin>>x[cadastro].tipo;
valor_erro:
cout<<"VALOR DO PRODUTO:"<<endl;
cin>>vproduto;

bool verificacaovalor = true;

for(int i=0;i < strlen(vproduto);i++)
    if(!isdigit(vproduto[i])&& vproduto[i] != '.'){
        verificacaovalor = false;
        break;
    }

if(verificacaovalor) x[cadastro].valor = atof(vproduto );
else{
    cout<<"Valor invalido! Tente novamente.\n"<<endl;
    goto valor_erro;
}
cout<<"LOCAL DISPONIVEL NO ESTOQUE:"<<endl;
cin>>x[cadastro].local_estoque;
cout<<"CODIGO DO PRODUTO:"<<endl;
cin>>x[cadastro].identificador_produto;
quantidade_erro:
cout<<"QUANTIDADE ENCONTRADA NO ESTOQUE:"<<endl;
cin>>nproduto;

bool verificacaoquantidade = true;

for(int i = 0; i<strlen(nproduto);i++)
    if(!isdigit(nproduto[i])){
        verificacaoquantidade = false;
        break;
    }
if(verificacaoquantidade) x[cadastro].quantidade_estoque = atoi(nproduto);
else{
    cout<<"Localidade Indisponivel! Tente novamente!"<<endl;
    cout<<endl;
    goto quantidade_erro;
}
cadastro++;
cout<<"Operacao Finalizada com Sucesso ! Deseja realizar mais uma operacao :"<<endl;
cout<<"1-SIM"<<endl;
cout<<"2-não"<<endl;
endcadastroerro:
cin>>escolha;
switch(escolha){
case 1:
    system("clear||cls");
    goto cadastro_erro;
case 2:
    cout<<"Adicao Realizada!"<<endl;
    cout<<""<<endl;
    system("clear||cls");
    break;
default:
    cout<<"Erro na Operacao!Tente novamente.";
    goto endcadastroerro;
}
}


void listagem();
void listagem(){
cout<<"Lista de Produtos do Estoque"<<endl<<endl;

char aux[50];

for(int i = 0;i<cadastro;i++){
    for(int j = 0;i<cadastro;j++){
        int r = strcmp(x[i].nome,x[j].nome);
         if(r>0){
            strcpy(aux,x[i].nome);
            strcpy(x[i].nome,x[j].nome);
            strcpy(x[j],aux);
        }
    }
    cout<<"Nome:"<<x[i].nome<<endl;
    cout<<"Classe:"<<x[i].tipo<<endl;
    cout<<"Valor:"<<x[i].valor<<endl;
    cout<<"Localidade:"<<x[i].local_estoque<<endl;
    cout<<"Codigo:"<<x[i].identificador_produto<<endl;
    cout<<"Quantidade:"<<x[i].quantidade_estoque<<endl;
    cout<<endl;
}
}

void busca();
void busca(){
  cout<<"Busca de Produto do Estoque"<<endl;
  char busca[100];
  cout<<"Insira o nome ou o codigo do produto desejado."<<endl;
  cin>>busca;

for(int i = 0;i<cadastro;++i){
    if((strcmp(busca,x[i].nome)==0)||(strcmp(busca,x[i].identificador_produto)==0)){
    cout<<"Produto Encontrado"<<endl<<endl;
    cout<<"Nome:"<<x[i].nome<<endl;
    cout<<"Classe:"<<x[i].tipo<<endl;
    cout<<"Valor:"<<x[i].valor<<endl;
    cout<<"Localidade:"<<x[i].local_estoque<<endl;
    cout<<"Codigo:"<<x[i].identificador_produto<<endl;
    cout<<"Quantidade:"<<x[i].quantidade_estoque<<endl;
    cout<<endl;

}else{
cout<<"Produto não encontrado! Tente um nome ou um codigo valido."<<endl<<endl;}
}
cout<<"Pressione ENTER para realizar outra operacao."<<endl;
getchar();
}
void remocao();
void removprod();
void remocao(){
cout<<"Remocao do Produto"<<endl;
cont = 0;

char codigo_produto[10];
cout<<"Insira o codigo do produto que voce deseja excluir"<<endl<<endl;

listagem();

cout<<"Codigo do Produto:";
cin>>codigo_produto;

for(int i = 0; i<cadastro;++i){
    if(strcmp(codigo_produto,x[i].identificador_produto)==0){
        for(int k = i; k<cadastro;++k){
            x[k]=x[k+1];
        }
    cadastro--;
    cont++;
    break;
    }
}

if(cont>0){
    cout<<"Produto removido"<<endl;
    cout<<"Pressione ENTER para avancar no processo"<<endl;
    getchar();
}else{cout<<"Codigo não encontrado ou invalido"<<endl;
cout<<"Pressione ENTER para avancar no processo"<<endl;
getchar();

}
}


int main(){
    cout<<"CONSULTA DE ESTOQUE\n"<<endl;
    cout<<endl;
    inicio_do_programa:
cout<<"Insira um numero referente a sua escolha"<<endl;
cout<< "1 - Adicao de Produtos"<<endl<<"2 - Remocao de Produtos"<<endl<<"3 - Busca por Produtos"<<endl<<"0 - Sair do programa"<<endl;
cin>>escolha;
cout<<endl;

switch (escolha){
  case 0 :
    cout<<"Encerrando o programa. Adeus."<<endl;
    return 0;
 default:
 case 1:
     system("cls");
     informacoes_produto();
     goto inicio_do_programa;
 case 2:
    system ("cls");
    remocao();
    getchar();
    system("cls");
    goto inicio_do_programa;
 case 3:
    system("cls");
    busca();
    getchar();
    system("cls");
    goto inicio_do_programa;
 case 4 :
    system("cls");
    cout<<"Listagem de Produtos no Estoque"<<endl;
    cout<<endl;
    listagem();
    cout<<"Pressione ENTER para retornar ao Menu Inicial"<<endl;
    getchar();
    getchar();
    system("clear||cls");
    goto inicio_do_programa;

    cout<<"Erro na processo. Insira uma opcao permitida."<<endl;
    cout<<endl;
    goto inicio_do_programa;
    }
    return 0;

}

 

  • Curtir 1
Postado

@234122

12 horas atrás, 234122 disse:

listar o os produtos em um estoque em ordem alfabética pelo nome

É só escolher algum algoritmo de ordenação e usar.

Pra comparar as strings use strcmp(), e pra copiar o conteúdo de uma string para outra, pode usar strcpy(). Por selection sort:

// QTD eh a quantidade de strings
// str eh o vetor de strings
// aux eh uma string auxiliar
for (j = 0; j < (QTD - 1); j++) {
    for (i = (j + 1); i < QTD; i++) {
        if (strcmp(str[i], str[j]) < 0) {
            strcpy(aux, str[i]);
            strcpy(str[i], str[j]);
            strcpy(str[j], aux);
        }
    }
}
  • Curtir 1
Postado

Use o botão code, como explicado no primeiro post do forum...

 

Veja a diferença:

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

#include <iostream>

using namespace std;

int escolha, cont, cadastro = 0;

struct produto
{
    char     nome[100];
    char     tipo[50];
    double   valor;
    char     local_estoque[50];
    char     identificador_produto[10];
    long int quantidade_estoque;
};

struct produto x[100];

struct produto informacoes_produto()
{
    char nproduto[20];
    char vproduto[20];
    cout << "-> Adicao de Produtos ao Estoque" << endl;
    cout << endl;
cadastro_erro:
    cout << "NOME DO PRODUTO:" << endl;
    cin >> x[cadastro].nome;
    cout << "TIPO DE PRODUTO:" << endl;
    cin >> x[cadastro].tipo;
valor_erro:
    cout << "VALOR DO PRODUTO:" << endl;
    cin >> vproduto;

    bool verificacaovalor = true;

    for (int i = 0; i < strlen(vproduto); i++)
        if (!isdigit(vproduto[i]) && vproduto[i] != '.')
        {
            verificacaovalor = false;
            break;
        }

    if (verificacaovalor)
        x[cadastro].valor = atof(vproduto);
    else
    {
        cout << "Valor invalido! Tente novamente.\n" << endl;
        goto valor_erro;
    }
    cout << "LOCAL DISPONIVEL NO ESTOQUE:" << endl;
    cin >> x[cadastro].local_estoque;
    cout << "CODIGO DO PRODUTO:" << endl;
    cin >> x[cadastro].identificador_produto;
quantidade_erro:
    cout << "QUANTIDADE ENCONTRADA NO ESTOQUE:" << endl;
    cin >> nproduto;

    bool verificacaoquantidade = true;

    for (int i = 0; i < strlen(nproduto); i++)
        if (!isdigit(nproduto[i]))
        {
            verificacaoquantidade = false;
            break;
        }
    if (verificacaoquantidade)
        x[cadastro].quantidade_estoque = atoi(nproduto);
    else
    {
        cout << "Localidade Indisponivel! Tente novamente!" << endl;
        cout << endl;
        goto quantidade_erro;
    }
    cadastro++;
    cout << "Operacao Finalizada com Sucesso ! Deseja realizar mais "
            "uma operacao :"
         << endl;
    cout << "1-SIM" << endl;
    cout << "2-não" << endl;
endcadastroerro:
    cin >> escolha;
    switch (escolha)
    {
        case 1:
            system("clear||cls");
            goto cadastro_erro;
        case 2:
            cout << "Adicao Realizada!" << endl;
            cout << "" << endl;
            system("clear||cls");
            break;
        default:
            cout << "Erro na Operacao!Tente novamente.";
            goto endcadastroerro;
    }
}

void listagem();
void listagem()
{
    cout << "Lista de Produtos do Estoque" << endl << endl;

    char aux[50];

    for (int i = 0; i < cadastro; i++)
    {
        for (int j = 0; i < cadastro; j++)
        {
            int r = strcmp(x[i].nome, x[j].nome);
            if (r > 0)
            {
                strcpy(aux, x[i].nome);
                strcpy(x[i].nome, x[j].nome);
                strcpy(x[j], aux);
            }
        }
        cout << "Nome:" << x[i].nome << endl;
        cout << "Classe:" << x[i].tipo << endl;
        cout << "Valor:" << x[i].valor << endl;
        cout << "Localidade:" << x[i].local_estoque << endl;
        cout << "Codigo:" << x[i].identificador_produto << endl;
        cout << "Quantidade:" << x[i].quantidade_estoque << endl;
        cout << endl;
    }
}

void busca();
void busca()
{
    cout << "Busca de Produto do Estoque" << endl;
    char busca[100];
    cout << "Insira o nome ou o codigo do produto desejado." << endl;
    cin >> busca;

    for (int i = 0; i < cadastro; ++i)
    {
        if ((strcmp(busca, x[i].nome) == 0) ||
            (strcmp(busca, x[i].identificador_produto) == 0))
        {
            cout << "Produto Encontrado" << endl << endl;
            cout << "Nome:" << x[i].nome << endl;
            cout << "Classe:" << x[i].tipo << endl;
            cout << "Valor:" << x[i].valor << endl;
            cout << "Localidade:" << x[i].local_estoque << endl;
            cout << "Codigo:" << x[i].identificador_produto << endl;
            cout << "Quantidade:" << x[i].quantidade_estoque << endl;
            cout << endl;
        }
        else
        {
            cout << "Produto não encontrado! Tente um nome ou um "
                    "codigo valido."
                 << endl
                 << endl;
        }
    }
    cout << "Pressione ENTER para realizar outra operacao." << endl;
    getchar();
}
void remocao();
void removprod();
void remocao()
{
    cout << "Remocao do Produto" << endl;
    cont = 0;

    char codigo_produto[10];
    cout << "Insira o codigo do produto que voce deseja excluir" << endl
         << endl;

    listagem();

    cout << "Codigo do Produto:";
    cin >> codigo_produto;

    for (int i = 0; i < cadastro; ++i)
    {
        if (strcmp(codigo_produto, x[i].identificador_produto) == 0)
        {
            for (int k = i; k < cadastro; ++k) { x[k] = x[k + 1]; }
            cadastro--;
            cont++;
            break;
        }
    }

    if (cont > 0)
    {
        cout << "Produto removido" << endl;
        cout << "Pressione ENTER para avancar no processo" << endl;
        getchar();
    }
    else
    {
        cout << "Codigo não encontrado ou invalido" << endl;
        cout << "Pressione ENTER para avancar no processo" << endl;
        getchar();
    }
}

int main()
{
    cout << "CONSULTA DE ESTOQUE\n" << endl;
    cout << endl;
inicio_do_programa:
    cout << "Insira um numero referente a sua escolha" << endl;
    cout << "1 - Adicao de Produtos" << endl
         << "2 - Remocao de Produtos" << endl
         << "3 - Busca por Produtos" << endl
         << "0 - Sair do programa" << endl;
    cin >> escolha;
    cout << endl;

    switch (escolha)
    {
        case 0:
            cout << "Encerrando o programa. Adeus." << endl;
            return 0;
        default:
        case 1:
            system("cls");
            informacoes_produto();
            goto inicio_do_programa;
        case 2:
            system("cls");
            remocao();
            getchar();
            system("cls");
            goto inicio_do_programa;
        case 3:
            system("cls");
            busca();
            getchar();
            system("cls");
            goto inicio_do_programa;
        case 4:
            system("cls");
            cout << "Listagem de Produtos no Estoque" << endl;
            cout << endl;
            listagem();
            cout << "Pressione ENTER para retornar ao Menu Inicial"
                 << endl;
            getchar();
            getchar();
            system("clear||cls");
            goto inicio_do_programa;

            cout << "Erro na processo. Insira uma opcao permitida."
                 << endl;
            cout << endl;
            goto inicio_do_programa;
    }
    return 0;
}

 

 

Sobre a ordenação de strings

 

Eu postei um programa que faz isso de várias maneiras, e talvez você deva rodar em sua máquina e dar uma olha em 

 

 

Não viu isso na lista de tópicos? É o que você quer fazer...

 

Sobre seu programa

 

Seu programa não está bom e tem muitos dos problemas comuns que aparecem nesses forums e nos programas em, geral, provavelmente pela maneira como ensinam e escrevem sobre isso hoje em dia.

 

E escreveu um programa C praticamente. C++ é muito mais expressiva e é muito mais fácil programar essas coisas em C++ do que em C. Quanto mais parecido com C mais trabalho vai ter.

 

Vou listar alguns dos problemas e sugiro que pense nisso ao menos. Do modo como está escrevendo

  • vai ter muito trabalho para criar os programas
  • vai ser difícil de mudar algo ou mesmo de testar
  • vai ser difícil aproveitar um programa para criar outro
  • não use os headers de C, como stdlib e string. Use C++.

Exemplos
 

void listagem();
void listagem()
{

 

Para que isso? Os protótipos existem para que você possa declarar as funções ao final ou se possível em outro arquivo, facilitando a leitura e o reuso. Para que usar logo em seguida?


 

            listagem();
            cout << "Pressione ENTER para retornar ao Menu Inicial"
                 << endl;
            getchar();
            getchar();
            system("clear||cls");
            goto inicio_do_programa;

Acima tem muitos desses problemas

 

 

  •  Não use system() para nada. Não estará fazendo nada. Não há praticamente nada que possa fazer com system() que não possa fazer em C ou C++. system() foi escrita em C e o sistema quase todo também. E em geral é proibido em empresas e escolas afinal: é um risco grande de segurança. E se tem algo que você não possa inicialmente fazer em C ou C++ talvez não deva mesmo fazer.
  •  main() deve ser a primeira função de seu programa. Se possível em um arquivo separado. Há muitas razões para isso, mas em especial vai gostar de começar a ler seus programas e os de outros a partir de main() E a partir do início do texto. Ao mesmo tempo.
  • evite retornar void de funções: em geral é um desperdício. Muitas vezes um erro. Use argumentos nas funções, e retorne algo delas
  • Use alguma ordem em suas funções, como a ordem alfabética por exemplo. Vai gostar disso quando seu programa tiver 50 funções ao invés de umas poucas. Muitos IDE mostram uma lista das funções, em geral na ordem em que foram declaradas, de modo que você pode clicar no nome e o editor vai direto para o código. E se estiverem em ordem é claro que você só ganha.
  • Nunca use variáveis globais. Isso é um pesadelo e sempre vai cair na sua cabeça. Em geral é proibido em empresas e escolas. Não declare NADA fora de main().
  • Não declare mais que uma variável por linha. Não acrescenta nada e só dificulta a leitura. Inicialize todas as variáveis.
  • Nunca leia valores do teclado para alimentar seu programa antes dele estar rodando. Só vai te atrasar e não acrescenta absolutamente nada. Use constantes, use funções que retornam a estrutura preenchida. Ao terminar os  testes aí sim incorpore a leitura. Um programa interativo é chato para testar. Durante o desenvolvimento ninguém quer interagir com o programa.
  • Alinhe seu código com algum critério. Evite longas linhas com mais de 60 colunas.
  • Se seu programa tem um menu, entenda que o menu() deve mostrar as opções e ler e retornar a opção. Um void menu() é um desperdício.
  • evite ler do teclado a menos que seja o objetivo do problema. Ler de arquivos é muito mais simples, seguro e fácil de reproduzir. Não há razão para ficar parado em frente a tela minutos inventando nomes de campos e coisas assim: o efeito é que vai acabar não testando direito porque é difícil controlar e repetir testes.
  • Não misture entrada de dados ou formatação com a apresentação dos dados ou a lógica do programa, Isso é um desastre para manutenção e desenvolvimento
  • Um printf()  ou cout de 6 linhas é muito, mas muito melhor que 6 printf() de 1 linha. E se só vai mostrar o texto puts() é ainda melhor e dezenas de vezes mais rápido que uma série de printf().

    
 

 

  • Curtir 2
Postado

Você tem que usar esses tipos (char [ ] por exemplo), ou você pode usar vectors e strings? Bjarne Stroustrup ia ficar triste de ver você usando coisas obsoletas assim, a não ser que você esteja estudando C++ antigo de propóposito.

  • Obrigado 1
Postado
#include<iostream>
#include<array>
#include<string>
#include<vector>
#include<cctype>
#include<algorithm>

//IMPORTANTE: ja que voce nunca usa new ou malloc, não precisa de delete ou free. Esses objetos sabem se auto-destruir quando
//saem de escopo

//ao invés de importar o namespace inteiro, melhor importar apenas os tipos e objetos que mais vamos usar
using std::cout; using std::cin; using std::endl;
using std::string;
using std::vector;

const size_t code_size = 11u; //por uma peculiaridade da funcao std::cin.get, que introduz o caractere nulo \0 ao final do array

//um apelido pro tipo std::array<char, 11> que usamos como identificador do produto
using id_prod = std::array<char, code_size>;

//aqui sua estrutura produto. Isso poderia ser feito com classes, e as funcoes transformadas em metodos.
//Mas vamos aderir ao seu design
struct produto
{
	string nome{};
	string tipo{};
	double valor{};//dinheiro e melhor representado por um inteiro em centavos. Quando precisar exibir, apenas divida por 100.
	string local_estoque{};
	id_prod identificador_produto{};
	long quantidade_estoque{};
};

/// <summary>
/// Recebe uma referencia a um double como parametro. Espera o usuario digitar uma linha no console.
/// Se o que o usuario digitou puder ser convertido para um double, a funcao armazena o valor convertido na referencia e retorna
/// true. Se o que o usuario digitou não puder ser convertido em um double, a funcao retorna false.
/// </summary>
/// <param name="out">O parametro de saida, onde sera armazenado o valor que o usuario digitar</param>
/// <returns>true, se o usuario digitar um valor valido, false caso contrario</returns>
bool readDouble (double& out)
{
	static string rawInput;
	std::getline (cin, rawInput);
	bool success{};

	try
	{
		out = std::stod (rawInput, nullptr);
		success = true;
	}
	catch (std::exception e)
	{
		success = false;
	}
	return success;
}

/// <summary>
/// Recebe uma referencia a um id_prod como parametro. Espera o usuario digitar uma linha no console.
/// Se o que o usuario digitou puder ser convertido para um id_prod (ou seja, apenas letras e numeros),
/// a funcao armazena o id_prod na referencia e retorna true.
/// Se o que o usuario digitou caracteres invalidos, a funcao retorna false
/// </summary>
/// <param name="out">O parametro de saida, onde sera armazenado o valor que o usuario digitar</param>
/// <returns>true, se o usuario digitar um valor valido, false caso contrario</returns>
bool readCode (id_prod& out)
{
	id_prod result{};

	cin.get (result.data (), result.size ());

	for (char c : result)
	{
		//aqui eu assumo que letras maiusculas, minusculas e digitos sao validos no codigo, outros caracteres não.
		if (!std::isalnum (c))
		{
			return false;
		}
	}
	return true;
}

void criar_produto (produto& out)
{
	cout << "NOME DO PRODUTO:" << endl;
	cin >> out.nome;
	cout << "TIPO DE PRODUTO:" << endl;
	cin >> out.tipo;

	//permanece em loop enquanto o usuario falhar em digitar um valor valido
	while (!readDouble (out.valor))
	{
		cout << "O valor digitado não pode ser convertido a um numero!" << endl;
	}
	cout << "LOCAL DISPONIVEL NO ESTOQUE:" << endl;
	cin >> out.local_estoque;
	cout << "CODIGO DO PRODUTO:" << endl;

	//permanece em loop enquanto o usuario falhar em digitar um valor valido
	while (!readCode (out.identificador_produto))
	{
		cout << "O codigo de produto deve conter apenas letras e numeros" << endl;
	}
}

//Mesmo sem necessidade de alterar o argumento, essa funcao aceita uma referencia (declarada como const, ja que não sera modificada
//Isso evita a copia da estrutura inteira, passando apenas uma referencia da estrutura
void mostrar_produto (const produto& prod)
{
	cout << "Nome: " << prod.nome << endl << "Tipo: " << prod.tipo << endl << "Valor: " << prod.valor << endl
		<< "Local: " << prod.local_estoque << "ID: " << prod.identificador_produto.data () << "Em estoque: " << prod.quantidade_estoque << endl;
}

size_t cadastrar_produtos (vector<produto>& catalogo)
{
	char reply{};
	size_t counter{};
	do
	{
		produto novo_produto;
		cout << "-> Adicao de Produtos ao Estoque\n" << endl;
		criar_produto (novo_produto);
		cout << "Produto criado:\n" << endl;
		mostrar_produto (novo_produto);
		cout << "Deseja adicionar o produto ao cadastro (s para cadastrar)?";
		cin >> reply;
		if (reply == 's')
		{
			catalogo.push_back (novo_produto);
			counter++;
		}
		cout << "Deseja cadastrar outro produto? (s para continuar, outro caractere para sair." << endl;
		cin >> reply;
	} while (std::tolower (reply) == 's');

	return counter;
}

/// <summary>
/// Precisamos dessa funcao pra usar sort. Essa funcao determina quando um produto e "menor" que outro.
/// Em ordem alfabetica por nome, isso e decidido pelo campo nome. Essa funcao leva em consideracao maiusculas e minusculas 
/// (todas as maiusculas sao menores que todas as minusculas).
/// a funcao std::tolower que eu usei acima troca um caractere pra minuscula (se ja for minuscula, não faz nada).
/// Uma boa primeira mexida seria se livrar desse defeitinho no codigo.
/// </summary>
/// <param name="p1"></param>
/// <param name="p2"></param>
/// <returns></returns>
bool order_alfa (const produto& p1, const produto& p2)
{
	return p1.nome < p2.nome;
}

void ordenar_catalogo (vector<produto>& catalogo)
{
	//o nome dessa variavel e predic. A declaracao dela e bem bizarra! Mas não precisamos dela.
	//bool (*predic)(const produto&, const produto&)(order_alfa);

	//a funcao std::sort, definida no header algorithm ordena coisas que tem um iterador de acesso aleatorio.
	//Os containers da STL tem iteradores, mas nem todos tem acesso aleatorio. vector, o que estamos usando, tem.
	//begin e end sao funcoes que retornam "iteradores" do inicio e fim de um container.
	//std::sort tem uma versão pra tipos que tem o operador < definido, por ex., strings, ints, etc. Nessa versão, não precisa
	//passar uma outra funcao pra ela saber como ordenar
	std::sort (catalogo.begin (), catalogo.end (), order_alfa);//veja que basta o nome da funcao pra passa-la a outra
}

//Como acima, recebe uma referencia. Se na funcao anterior evitamos copiar uma estrutura produto, aqui evitamos copiar um vetor 
//inteiro delas.
size_t listar_catalogo (const vector<produto>& catalogo)
{
	size_t counter{};
	for (const produto& prod : catalogo)
	{
		cout << "\nProduto n" << counter++ << " no catalogo" << endl;//uma ilustracao do operador pos-incremento
		mostrar_produto (prod);
	}
	return catalogo.size ();
	return counter;//deve ser igual a catalogo.size()
}

//void do_tests ();

int main ()
{
	vector<produto> catalogo;
	//do_tests ();
	
	//creio que usando as poucas funcoes que eu usei, voce possa construir o resto das funcoes que faltam e
	//fazer seu programa inteiro funcionar. Qualquer duvida, pode perguntar. Talvez tenha um erro logico em algum lugar.
	//não tive tempo de testar.
  	//Um problema que prevejo e o enter ficando "empacado" no stream de entrada (o std::cin) e isso dando problema nos getlines.
	//Se isso acontecer, coloque cin.ignore (); antes da linha que ele estiver pulando, pra "dar descarga" no enter
	return 0;
}

 

Pra não dizer que so reclamo 😅, aqui vai um exemplo dum codigo um pouco mais moderno. Ainda não se encaixa bem no seu exemplo especifico, e não resolve o problema todo, mas da pra ter uma ideia do que falta você estudar 🙂

 

Uma pena que o tamanho do post (pelo menos aqui em casa) ficou estreito demais, e não da pra ver as linhas inteiras. Acho que no seu IDE deve ficar melhor, copie e cole la.

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