Menu
Coddy logo textTech

Removendo uma Tarefa

Parte da seção Lógica & Fluxo do Journey de C++ da Coddy. Lição 21 de 56.

challenge icon

Desafio

Fácil

Amplie sua ferramenta de lista de tarefas implementando a funcionalidade de remoção para excluir tarefas específicas da lista. Isso dá continuidade à lição anterior, adicionando a capacidade de remover tarefas pelo número de posição.

As seguintes entradas serão fornecidas:

  • Um inteiro n representando o número de tarefas a serem adicionadas inicialmente
  • Em seguida, n strings representando as descrições das tarefas
  • Um inteiro taskNumber representando o número da tarefa a ser removida (indexação baseada em 1)

Seu programa deve:

  1. Começar com a mesma configuração da lição anterior (um std::vector<std::string> vazio chamado tasks e uma mensagem de boas-vindas)
  2. Ler o número de tarefas com cin >> n e, em seguida, chamar cin.ignore() para descartar a quebra de linha restante antes de ler as strings das tarefas com getline()
  3. Adicionar cada descrição de tarefa ao vetor usando push_back()
  4. Ler o número da tarefa a ser removida
  5. Validar se o número da tarefa está dentro do intervalo válido (1 até o tamanho do vetor)
  6. Se o número da tarefa for inválido, exibir uma mensagem de erro
  7. Se o número da tarefa for válido, usar o método .erase() para remover a tarefa na posição especificada
  8. Exibir uma mensagem de confirmação mostrando qual tarefa foi removida
  9. Exibir as tarefas restantes em um formato de lista numerada
  10. Exibir o número total atualizado de tarefas

Importante: combinando cin e getline():
Quando você lê um inteiro com cin >> n, ele deixa um caractere de quebra de linha ('\n') no buffer de entrada. Se você chamar getline() em seguida, ela lerá imediatamente essa quebra de linha restante como uma string vazia, em vez da sua entrada real. Para corrigir isso, chame cin.ignore() logo após cin >> n para descartar a quebra de linha restante:

cin >> n;
cin.ignore(); // discard the leftover newline
for (int i = 0; i < n; i++) {
    string task;
    getline(cin, task); // now reads correctly
    tasks.push_back(task);
}

Use o seguinte formato exato de saída:

Para um número de tarefa inválido:

Welcome to Task List Tool!

Menu Options:
1. Add Task
2. View Tasks
3. Quit

Task list system initialized and ready!
Error: Invalid task number. Please enter a number between 1 and [total tasks].

Para uma remoção de tarefa válida:

Welcome to Task List Tool!

Menu Options:
1. Add Task
2. View Tasks
3. Quit

Task list system initialized and ready!
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
2. [second remaining task]
...
Total tasks: [updated number of tasks]

Lembre-se de que .erase() exige um iterador, portanto use tasks.erase(tasks.begin() + index), em que index é a posição baseada em 0 (taskNumber - 1). Valide a entrada verificando se taskNumber é maior que 0 e menor ou igual a tasks.size(). Se a lista ficar vazia após a remoção, exiba "No tasks remaining." em vez da lista de tarefas restantes.

Experimente você mesmo

#include <iostream>
#include <vector>
#include <string>

int main() {
    std::vector<std::string> tasks;
    
    std::cout << "Welcome to Task List Tool!" << std::endl;
    std::cout << std::endl;
    std::cout << "Menu Options:" << std::endl;
    std::cout << "1. Add Task" << std::endl;
    std::cout << "2. View Tasks" << std::endl;
    std::cout << "3. Quit" << std::endl;
    std::cout << std::endl;
    std::cout << "Task list system initialized and ready!" << std::endl;
    
    int n;
    std::cin >> n;
    
    for (int i = 0; i < n; i++) {
        std::string task;
        std::cin >> task;
        tasks.push_back(task);
    }
    
    if (tasks.empty()) {
        std::cout << "No tasks available." << std::endl;
    } else {
        std::cout << "Your Tasks:" << std::endl;
        for (int i = 0; i < tasks.size(); i++) {
            std::cout << (i + 1) << ". " << tasks[i] << std::endl;
        }
        std::cout << "Total tasks: " << tasks.size() << std::endl;
    }
    
    return 0;
}

Todas as lições de Lógica & Fluxo

Pratique por conta própria: Compilador de C++ online