Error in removing c++

Asked

Viewed 110 times

0

Good evening, you guys, I am unable to make the remove function work. Find the number but do not delete the vector value.

#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;
    }
}

1 answer

0

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

It is not correct to use parameter variables to store value (except if returning 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;
}
  • I couldn’t get your code to work. I understand what you said about values within the methods, but within the function I did it finds the number to be excluded but does not exclude. Where is the error in my function?

Browser other questions tagged

You are not signed in. Login or sign up in order to post.