Menu
Coddy logo textTech

Usuwanie zadania

Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 21 z 56.

challenge icon

Wyzwanie

Łatwy

Rozszerz swoje narzędzie do tworzenia listy zadań, implementując funkcję usuwania, która usuwa wybrane zadania z listy. To rozwija poprzednią lekcję, dodając możliwość usuwania zadań na podstawie ich numeru pozycji.

Podane zostaną następujące dane wejściowe:

  • Liczba całkowita n oznaczająca początkową liczbę zadań do dodania
  • Następnie n ciągów znaków z opisami zadań
  • Liczba całkowita taskNumber oznaczająca numer zadania do usunięcia (numeracja od 1)

Twój program powinien:

  1. Rozpocząć od takiej samej konfiguracji jak w poprzedniej lekcji (pusty std::vector<std::string> o nazwie tasks i powitalny komunikat)
  2. Wczytać liczbę zadań za pomocą cin >> n, a następnie wywołać cin.ignore(), aby odrzucić pozostały znak nowej linii przed wczytaniem ciągów znaków zadań za pomocą getline()
  3. Dodać każdy opis zadania do tablicy, używając push_back()
  4. Wczytać numer zadania do usunięcia
  5. Sprawdzić, czy numer zadania mieści się w prawidłowym zakresie (od 1 do rozmiaru tablicy)
  6. Jeśli numer zadania jest nieprawidłowy, wypisać komunikat o błędzie
  7. Jeśli numer zadania jest prawidłowy, użyć metody .erase(), aby usunąć zadanie z określonej pozycji
  8. Wypisać komunikat potwierdzający, które zadanie zostało usunięte
  9. Wyświetlić pozostałe zadania w formie ponumerowanej listy
  10. Wyświetlić zaktualizowaną łączną liczbę zadań

Ważne: łączenie cin i getline():
Gdy wczytujesz liczbę całkowitą za pomocą cin >> n, w buforze wejściowym pozostaje znak nowej linii ('\n'). Jeśli następnie wywołasz getline(), odczyta on od razu ten pozostały znak nowej linii jako pusty ciąg znaków zamiast rzeczywistych danych wejściowych. Aby temu zapobiec, wywołaj cin.ignore() zaraz po cin >> n, aby odrzucić pozostały znak nowej linii:

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

Użyj następującego dokładnego formatu wyjściowego:

W przypadku nieprawidłowego numeru zadania:

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

W przypadku prawidłowego usunięcia zadania:

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]

Pamiętaj, że .erase() wymaga iteratora, dlatego użyj tasks.erase(tasks.begin() + index), gdzie index jest pozycją liczoną od 0 (taskNumber - 1). Sprawdź poprawność danych wejściowych, weryfikując, czy taskNumber jest większe od 0 i mniejsze lub równe tasks.size(). Jeśli po usunięciu lista będzie pusta, wypisz "No tasks remaining." zamiast listy pozostałych zadań.

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator C++ online