Menu
Coddy logo textTech

할 일 삭제하기

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

challenge icon

챌린지

쉬움

작업 목록 도구를 확장하여 목록에서 특정 작업을 삭제하는 제거 기능을 구현하세요. 이전 레슨을 기반으로 하며, 위치 번호로 작업을 제거하는 기능을 추가합니다.

다음 입력이 제공됩니다:

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

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

  1. 이전 레슨과 동일한 설정으로 시작합니다 (std::vector<std::string> 이름이 tasks인 빈 벡터와 환영 메시지).
  2. cin >> n을 사용하여 작업 수를 읽은 다음 cin.ignore()을 호출하여 getline()으로 작업 문자열을 읽기 전에 남아 있는 개행 문자를 버립니다.
  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()에는 반복자가 필요하므로 index가 0부터 시작하는 위치(taskNumber - 1)일 때 tasks.erase(tasks.begin() + index)를 사용해야 합니다. 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;
}

로직과 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C++ 컴파일러