Error in function remove c ++

0

Good evening guys, I'm not getting the remove function to work. Find the number but do not delete the value of the vector.

#include <cstdlib>
#include <iostream>
#include <string.h>
using namespace std;

#define MAX 100

typedef struct {
    int numero;
    char nome[20];
} VENDEDOR;

typedef struct {
    VENDEDOR vetor[MAX];
    int numElementos;
} LISTA;

void criar(LISTA *lista);
int vazia(LISTA lista);
int cheia(LISTA lista);
bool inserir(LISTA *lista, VENDEDOR v1, int);
void remover(LISTA lista, int numero, int pos);
void buscaNome(LISTA lista, char nome[], int pos);
void buscaNumero(LISTA lista, int numero, int pos);
void imprimir(LISTA lista);

int main() {
    LISTA lista;
    VENDEDOR v1;
    int pos = 1;
    int numero;
    char nome[20];

    int op;
    do {
        cout << "Digite a opção desejada:" << endl;
        cout << "1- Criar" << endl;
        cout << "2- Vazia" << endl;
        cout << "3- Cheia" << endl;
        cout << "4- Inserir" << endl;
        cout << "5- Remover" << endl;
        cout << "6- Buscar nome" << endl;
        cout << "7- Buscar número" << endl;
        cout << "8- Imprimir" << endl;
        cout << "0- Sair" << endl;
        cout << "Opção:";
        cin>>op;

        switch (op) {
            case 1:
                criar(&lista);
                break;
            case 2:
                vazia(lista);
                break;
            case 3:
                cheia(lista);
                break;
            case 4:
                inserir(&lista, v1, pos);
                break;
            case 5:
                remover(lista, numero, pos);
                break;
            case 6:
                buscaNome(lista, nome, pos);
                break;
            case 7:
                buscaNumero(lista, numero, pos);
                break;
            case 8:
                imprimir(lista);
                break;
        }
    } while (op != 0);
    return 0;
}

void criar(LISTA *lista) {
    lista->numElementos = 0;
    cout << "Lista criada" << endl << endl;
}

int vazia(LISTA lista) {
    if (lista.numElementos == 0) {
        cout << "Lista vazia" << endl << endl;
    } else {
        cout << "Lista com elementos" << endl << endl;
    }
}

int cheia(LISTA lista) {
    if (lista.numElementos == MAX) {
        cout << "Lista cheia" << endl << endl;
    } else {
        cout << "Lista com espaço" << endl << endl;
    }
}

bool inserir(LISTA *lista, VENDEDOR v1, int pos) {
    cout << "Número: ";
    cin >> v1.numero;
    cout << "Nome: ";
    cin >> v1.nome;
    int i;
    if (lista->numElementos == MAX || pos > lista->numElementos + 1) {
        return false;
    }
    for (i = lista->numElementos; i > lista->numElementos; i--) {
        lista->vetor[i] = lista->vetor[i - 1];
    }
    lista->vetor[i] = v1;
    lista->numElementos++;
    cout << endl;
    return true;
}

void remover(LISTA lista, int numero, int pos) {
    cout << "Digite o número para apagar: ";
    cin>>numero;
    int i;
    bool aux = true;
    for (i = 0; i <= pos; i++) {
        if (numero == lista.vetor[i].numero) {
            lista.vetor[i].numero = lista.vetor[i + 1].numero;
            cout << "Removido com sucesso!" << endl;
            aux = false;
        }
    }
    pos--;
    if (aux) {
        cout << "Não encontrado!" << endl;
    }
}

void buscaNome(LISTA lista, char nome[], int pos) {
    cout << "Digite o nome para pesquisar: ";
    cin>>nome;
    int i;
    bool aux = true;
    for (i = 0; i <= pos; i++) {
        if (nome[pos] == lista.vetor[i].nome[pos]) {
            cout << "Número: " << lista.vetor[i].numero << endl << endl;
            aux = false;
        }
    }
    if (aux) {
        cout << "Não encontrado!" << endl;
    }
}

void buscaNumero(LISTA lista, int numero, int pos) {
    cout << "Digite o número para pesquisar: ";
    cin>>numero;
    int i;
    bool aux = true;
    for (i = 0; i <= pos; i++) {
        if (numero == lista.vetor[i].numero) {
            cout << "Nome: " << lista.vetor[i].nome << endl << endl;
            aux = false;
        }
    }
    if (aux) {
        cout << "Não encontrado!" << endl;
    }
}

void imprimir(LISTA lista) {
    for (int i = 0; i < lista.numElementos; i++) {
        cout << "Número: " << lista.vetor[i].numero << endl;
        cout << "Nome: " << lista.vetor[i].nome << endl << endl;
    }
}
    
asked by anonymous 23.09.2016 / 06:58

1 answer

0

A small note is that your methods have parameters, but still values are read into them.

It is not correct to use parameter variables to store values (except if it returns values by pointers).

// Acho q se já tem uma posição para remover o valor, não
// há necessidade de passar o número a ser removido também

#define MAX_LEN 10

void remover(Lista lst, int pos){
    // Mostra erro se posição for inválida ou de não ouver valor na lista
    if(pos < 0 || pos >= MAX_LEN || !lst.vetor[x].numero){
        cout << "Não foi possível remover o valor dessa posição." << endl;
        return; // encerra método sem retorno
    }

    for(int x=pos; x<MAX_LEN-1; x++){
        // Passa todos os valores apos a posição a ser removida
        // para a posição anterior da lista
        lst.vetor[x].numero = lst.vetor[x+1].numero;
    }
    //limpa o ultimo valor (caso [tenho|não tenha] valor).
    lst.vetor[MAX_LEN-1].numero = 0;
}
    
23.09.2016 / 08:16