Ir ao conteúdo
  • Cadastre-se

C++ Como considerar um espaço vazio num vetor de char em c++


july.pinho03
Ir à solução Resolvido por Flávio Pedroza,

Posts recomendados

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

using namespace std;

struct produto{
    int codigo;
    char nome[50];
    int quantidade;
    float preco;
};

void cadastro (struct produto *p, int N){
    for (int i=0; i<N; i++){
        cout << "Informe o codigo do produto: ";
        cin >> p[i].codigo;
        cout << "Nome do produto: ";
        cin >> p[i].nome;
        cout << "Quantidade disponivel: ";
        cin >> p[i].quantidade;
        cout << "Preco: R$";
        cin >> p[i].preco;
    }
}

void maior_preco(struct produto *p, int N){
    float aux=0;
    int codigo;
    for(int i=0; i<N; i++){
        if(p[i].preco> aux){
            aux=p[i].preco;
        }
    }
    for(int i=0; i<N; i++){
        if(p[i].preco == aux){
            cout << "O produto com maior preco de venda eh " << p[i].nome << endl;
        }
    }
}


void maior_quantidade(struct produto *p, int N){
    float aux=0;
    char nome[50];
    for(int i=0; i<N; i++){
        if(p[i].quantidade > aux){
            aux=p[i].quantidade;
        }
    }
    for(int i=0; i<N; i++){
        if(p[i].quantidade == aux){
            cout << "O produto com maior quantidade eh " << p[i].nome << endl;
        }
    }
}

int main(){
    int N;
    cout << "Informe quantos produtos a serem cadastrados: ";
    cin >> N;
    struct produto *p = (struct produto*) malloc (N*sizeof(struct produto));
    cadastro(p, N);
    maior_preco(p, N);
    maior_quantidade(p, N);
    free(p);
    return 0;
}

Estou tentando resolver o exercicio abaixo:

 Considere um cadastro de produtos de um estoque, com as seguintes informações para cada produto: Código de identificação do produto - representado por um valor inteiro; Nome do produto - com até 50 caracteres; Quantidade disponível no estoque - representado por um número inteiro; Preço de venda - representado por um valor real.

(a) Defina uma estrutura, denominada produto, que tenha os campos apropriados para guardar as informações de um produto

(b) Crie um conjunto de N produtos (N e um valor fornecido pelo usuário) e peça ao usuário para entrar com as informações de cada produto

(c) Encontre o produto com o maior preço de venda

(d) Encontre o produto com a maior quantidade disponível no estoque.

 

Estou tendo problema com o vetor de char. Sei que em c++ deveria declarar como string, porém se declarar como string da erro na alocação de memória e o código n roda. Preciso que esse vetor de char considere os espaços, ou seja que aceite nomes compostos. Não estou sabendo fazer.

 

 

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

Você escreveu um programa em C. Não há razão para escrever assim em C++, que é muito mais simples e expressiva para essas coisas.

 

Escreva em torno dos dados

 

Notou que seu programa gira em torno de um cadastro e não tem isso no seu programa???? Claro que seu programa vai ficar mais complicado.

 

1 hora atrás, july.pinho03 disse:
void cadastro (struct produto *p, int N){

 

Deve ser algo como

 

struct Cadastro
{
    unsigned tam; // quantos cabem
    unsigned N; // quantos tem
    Produto  prd[MAX];
}

 

E as funções todas fazem parte da struct em C++. É muita mais simples. E pode usar um vetor de Produto dentro do Cadastro. 

 

Você tem um livro? Seu curso adota um livro? 

 

Tem muitos erros ainda :)

 

 

porque retorna void toda hora????

 

1 hora atrás, july.pinho03 disse:
void maior_quantidade(struct produto *p, int N){

 

Não seria razoável que essa função retornasse um int, tipo a maior quantidade no estoque?

 

1 hora atrás, july.pinho03 disse:
void maior_preco(struct produto *p, int N){

 

Não seria razoável essa função retornar um float com o maior preço?

 

Escrevendo em torno dos dados não seria razoável ter esses dois valores dentro da struct Cadastro?

 

 

 

1 hora atrás, july.pinho03 disse:
struct produto *p = (struct produto*) malloc (N*sizeof(struct produto));

 

Se está aprendendo evite desde já escrever assim.

 

Qual o tipo de p, que está declarando aqui???

 

p é struct produto* então declare assim. Só vai se confundir usando o asterisco do lado errado na declaração.

 

Onde alocou memória para o cadastro?

 

Melhor reescrever 

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

  • Solução

Para incluir espaços, use cin.getline / cin.ignore:

void cadastro (struct produto *p, int N){
    for (int i=0; i<N; i++){
        cout << "Informe o codigo do produto: ";
        cin >> p[i].codigo;
        cin.ignore();
        cout << "Nome do produto: ";
        cin.getline(p[i].nome,50);
        
        cout << "Quantidade disponivel: ";
        cin >> p[i].quantidade;
        cout << "Preco: R$";
        cin >> p[i].preco;
    }
}

 

Link para o comentário
Compartilhar em outros sites

@arfneto Obrigada pelos comentários. Algumas coisas entendi outras não. Peguei essa matéria esse semestre, ou seja, ead. Meu professor não da aulas com os assuntos, ele seleciona alguns videos pra gente assistir,  mas muitas vezes em C e passa exercicio pra a gente fazer. Como aprendi o inicio em c++ preferi continuar. Não tenho  nenhum livro. Acabo tendo que aprender sozinha com vídeo no youtube. Sinto que tem muitas coisas que não sei, mas estou tentando melhorar

Link para o comentário
Compartilhar em outros sites

9 horas atrás, july.pinho03 disse:

Como aprendi o inicio em c++ preferi continuar

 

Não é uma ideia. C não é C++, C++ não é C. A diferença é enorme. E importante.

 

Por outro lado, criar modelos em C++ ~e muito mais fácil e interessante.

 

9 horas atrás, july.pinho03 disse:

Algumas coisas entendi outras não. Peguei essa matéria esse semestre, ou seja, ead. Meu professor não da aulas com os assuntos, ele seleciona alguns videos pra gente assistir,  mas muitas vezes em C e passa exercicio pra a gente fazer

 

Seu professor não tem uma boa atitude em relação a isso. Pergunte sobe as coisas que não entendeu. Esse é o objetivo do forum, e de alguns que eventualmente respondem aqui. Claro, se pode ver como um desafio pessoal ou uma chance de mostrar conhecimento, mas acho que a ideia melhor é ajudar e criar uma base de conhecimento pesquisável aqui, e falar com pessoas sobre as coisas de cada forum.

 

Entendeu o que significa "escrever em torno dos dados"?

 

De volta ao programa

 

12 horas atrás, july.pinho03 disse:
int main(){
    int N;
    cout << "Informe quantos produtos a serem cadastrados: ";
    cin >> N;
    struct produto *p = (struct produto*) malloc (N*sizeof(struct produto));
    cadastro(p, N);
    maior_preco(p, N);
    maior_quantidade(p, N);
    free(p);
    return 0;
}

 

Está claro o que precisa fazer e o modo como está fazendo é bem linear.

 

Mas faltam as coisas de que falei

 

Sobre string

 

12 horas atrás, july.pinho03 disse:

Estou tendo problema com o vetor de char. Sei que em c++ deveria declarar como string, porém se declarar como string da erro na alocação de memória e o código n roda. Preciso que esse vetor de char considere os espaços, ou seja que aceite nomes compostos

 

string em C++ é uma classe e você não pode alocar um vetor delas usando malloc() que é uma função de stdlib, de C. Na verdade não deveria usar nem stdio nem stdlib em praticamente nenhum caso. E se fosse usar há uma convenção para isso, que ninguém te contou.

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