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

Estenda sua ferramenta de lista de tarefas implementando a funcionalidade de remoção para excluir tarefas específicas da lista. Isso se baseia na lição anterior, adicionando a capacidade de remover tarefas pelo seu número de posição.

As seguintes entradas serão fornecidas:

  • Um número inteiro n representando o número de tarefas a serem adicionadas inicialmente
  • Em seguida, n strings representando as descrições das tarefas
  • Um número 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 a mensagem de boas-vindas)
  2. Ler o número de tarefas com cin >> n, depois chamar cin.ignore() para descartar a nova linha restante antes de ler as strings de tarefa 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, imprimir 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. Imprimir uma mensagem de confirmação mostrando qual tarefa foi removida
  9. Exibir as tarefas restantes em um formato de lista numerada
  10. Mostrar o número total atualizado de tarefas

Importante — misturando cin e getline():
Quando você lê um número inteiro com cin >> n, ele deixa um caractere de nova linha ('\n') no buffer de entrada. Se você chamar getline() em seguida, ele lerá imediatamente essa nova 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 nova 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 de saída exato:

Para 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 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 que .erase() requer um iterador, então use tasks.erase(tasks.begin() + index) onde 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, imprima "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