Menu
Coddy logo textTech

할 일 삭제하기

Coddy C++ 여정의 로직과 흐름 섹션에 포함된 레슨 — 56개 중 21번째.

challenge icon

챌린지

쉬움

목록에서 특정 작업을 삭제하는 삭제 기능을 구현하여 작업 목록 도구를 확장하세요. 이는 이전 레슨을 바탕으로 작업의 위치 번호를 사용하여 작업을 제거하는 기능을 추가하는 것입니다.

다음 입력이 제공됩니다:

  • 처음에 추가할 작업의 수를 나타내는 정수 n
  • 그 다음 작업 설명을 나타내는 n개의 문자열
  • 삭제할 작업 번호를 나타내는 정수 taskNumber (1부터 시작하는 인덱스)

프로그램은 다음을 수행해야 합니다:

  1. 이전 레슨과 동일한 설정으로 시작합니다 (tasks라는 이름의 빈 std::vector<std::string> 및 환영 메시지)
  2. cin >> n으로 작업 수를 읽은 다음, getline()으로 작업 문자열을 읽기 전에 남은 줄바꿈 문자를 버리기 위해 cin.ignore()를 호출합니다.
  3. push_back()을 사용하여 각 작업 설명을 벡터에 추가합니다.
  4. 삭제할 작업 번호를 읽습니다.
  5. 작업 번호가 유효한 범위(1부터 벡터의 크기까지) 내에 있는지 확인합니다.
  6. 작업 번호가 유효하지 않으면 오류 메시지를 출력합니다.
  7. 작업 번호가 유효하면 .erase() 메서드를 사용하여 지정된 위치의 작업을 제거합니다.
  8. 어떤 작업이 제거되었는지 보여주는 확인 메시지를 출력합니다.
  9. 남은 작업들을 번호가 매겨진 목록 형식으로 표시합니다.
  10. 업데이트된 총 작업 수를 표시합니다.

중요 — cingetline() 혼용:
cin >> n으로 정수를 읽으면 입력 버퍼에 줄바꿈 문자('\n')가 남습니다. 그 후 getline()을 호출하면 실제 입력 대신 남은 줄바꿈 문자를 빈 문자열로 즉시 읽게 됩니다. 이를 해결하려면 cin >> n 바로 다음에 cin.ignore()를 호출하여 남은 줄바꿈 문자를 버리세요:

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

다음과 같은 정확한 출력 형식을 사용하세요:

유효하지 않은 작업 번호의 경우:

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

유효한 작업 삭제의 경우:

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]

.erase()는 반복자(iterator)를 필요로 하므로, tasks.erase(tasks.begin() + index)를 사용하세요. 여기서 index는 0부터 시작하는 위치(taskNumber - 1)입니다. taskNumber가 0보다 크고 tasks.size()보다 작거나 같은지 확인하여 입력을 검증하세요. 삭제 후 목록이 비게 되면 남은 작업 목록 대신 "No tasks remaining."을 출력하세요.

직접 해보기

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

로직과 흐름의 모든 레슨