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 task en implémentant la fonctionnalité de suppression afin de supprimer des task spécifiques de la liste. Cela s’appuie sur la leçon précédente en ajoutant la possibilité de supprimer des task selon leur position.

Les entrées suivantes seront fournies :

  • Un entier n représentant le nombre de task à ajouter initialement
  • Puis n chaînes représentant les descriptions des task
  • Un entier taskNumber représentant le numéro de task à supprimer (indexation à partir de 1)

Votre programme doit :

  1. Commencer avec la même configuration que dans la leçon précédente (std::vector<std::string> vide nommé tasks et message de bienvenue)
  2. Lire le nombre de task avec cin >> n, puis appeler cin.ignore() pour supprimer le retour à la ligne restant avant de lire les chaînes de task avec getline()
  3. Ajouter chaque description de task au vecteur à l’aide de push_back()
  4. Lire le numéro de task à supprimer
  5. Vérifier que le numéro de task se trouve dans la plage valide (1 à la taille du vecteur)
  6. Si le numéro de task n’est pas valide, afficher un message d’erreur
  7. Si le numéro de task est valide, utiliser la méthode .erase() pour supprimer le task à la position spécifiée
  8. Afficher un message de confirmation indiquant quel task a été supprimé
  9. Afficher les task restants sous forme de liste numérotée
  10. Afficher le nombre total de task mis à jour

Important : mélanger cin et getline() :
Lorsque vous lisez un entier avec cin >> n, un caractère de nouvelle ligne ('\n') reste dans le tampon d’entrée. Si vous appelez ensuite getline(), cette fonction lira immédiatement ce retour à la ligne restant comme une chaîne vide au lieu de votre entrée réelle. Pour résoudre ce problème, appelez cin.ignore() juste après cin >> n afin de supprimer le retour à la ligne restant :

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 le format de sortie exact suivant :

Pour un numéro de task non valide :

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 la suppression d’un task 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), où index correspond à 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 task restants.

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

Entraînez-vous par vous-même : Compilateur C++ en ligne