Menu
CoddyTech

移除任务

本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 21 课,共 56 课。

challenge icon

挑战

简单

通过实现删除功能,扩展你的任务列表工具,从列表中删除指定任务。在上一课的基础上,添加按任务序号删除任务的功能。

将提供以下输入:

  • 一个整数 n,表示初始要添加的任务数量
  • 接下来是 n 个字符串,表示任务描述
  • 一个整数 taskNumber,表示要删除的任务序号(从 1 开始计数)

你的程序应当:

  1. 使用与上一课相同的设置(创建一个空的 std::vector<std::string>,命名为 tasks,并显示欢迎消息)
  2. 使用 cin >> n 读取任务数量,然后调用 cin.ignore(),丢弃剩余的换行符,再使用 getline() 读取任务字符串
  3. 使用 push_back() 将每条任务描述添加到 vector 中
  4. 读取要删除的任务序号
  5. 验证任务序号是否在有效范围内(1 到 vector 的大小)
  6. 如果任务序号无效,输出错误消息
  7. 如果任务序号有效,使用 .erase() 方法删除指定位置的任务
  8. 输出确认消息,说明删除了哪个任务
  9. 以带序号的列表形式显示剩余任务
  10. 显示更新后的任务总数

重要:混用 cin 和 getline():
使用 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() 需要一个迭代器,因此请使用 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;
}

逻辑与流程中的所有课

自己练习: C++ 在线编译器