Menu
Coddy logo textTech

Supprimer une tâche

Fait partie de la section Logique et Flux du Journey C++ de Coddy — leçon 21 sur 56.

challenge icon

Défi

Facile

Étendez votre outil de liste de tâches en implémentant la fonctionnalité de suppression pour effacer des tâches spécifiques de la liste. Cela s'appuie sur la leçon précédente en ajoutant la possibilité de supprimer des tâches par leur numéro de position.

Les entrées suivantes seront fournies :

  • Un entier n représentant le nombre de tâches à ajouter initialement
  • Ensuite, n chaînes de caractères représentant les descriptions des tâches
  • Un entier taskNumber représentant le numéro de la tâche à supprimer (indexation commençant à 1)

Votre programme doit :

  1. Commencer avec la même configuration que la leçon précédente (un std::vector<std::string> vide nommé tasks et un message de bienvenue)
  2. Lire le nombre de tâches avec cin >> n, puis appeler cin.ignore() pour ignorer le caractère de nouvelle ligne restant avant de lire les chaînes de tâches avec getline()
  3. Ajouter chaque description de tâche au vecteur en utilisant push_back()
  4. Lire le numéro de la tâche à supprimer
  5. Valider que le numéro de la tâche est dans la plage valide (de 1 à la taille du vecteur)
  6. Si le numéro de la tâche est invalide, afficher un message d'erreur
  7. Si le numéro de la tâche est valide, utiliser la méthode .erase() pour supprimer la tâche à la position spécifiée
  8. Afficher un message de confirmation indiquant quelle tâche a été supprimée
  9. Afficher les tâches restantes sous forme de liste numérotée
  10. Afficher le nombre total de tâches mis à jour

Important — mélanger cin et getline() :
Lorsque vous lisez un entier avec cin >> n, cela laisse un caractère de nouvelle ligne ('\n') dans le tampon d'entrée. Si vous appelez ensuite getline(), il lira immédiatement cette nouvelle ligne restante comme une chaîne vide au lieu de votre saisie réelle. Pour corriger cela, appelez cin.ignore() juste après cin >> n pour ignorer la nouvelle ligne 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);
}

Utilisez exactement le format de sortie suivant :

Pour un numéro de tâche invalide :

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

Pour une suppression de tâche valide :

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]

N'oubliez pas que .erase() nécessite un itérateur, utilisez donc tasks.erase(tasks.begin() + index)index est la position basée sur 0 (taskNumber - 1). Validez l'entrée en vérifiant si taskNumber est supérieur à 0 et inférieur ou égal à tasks.size(). Si la liste devient vide après la suppression, affichez "No tasks remaining." au lieu de la liste des tâches restantes.

Essayez vous-même

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

Toutes les leçons de Logique et Flux