移除任务
本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 21 课,共 56 课。
挑战
简单通过实现删除功能,扩展你的任务列表工具,从列表中删除指定任务。在上一课的基础上,添加按任务序号删除任务的功能。
将提供以下输入:
- 一个整数
n,表示初始要添加的任务数量 - 接下来是
n个字符串,表示任务描述 - 一个整数
taskNumber,表示要删除的任务序号(从 1 开始计数)
你的程序应当:
- 使用与上一课相同的设置(创建一个空的
std::vector<std::string>,命名为tasks,并显示欢迎消息) - 使用
cin >> n读取任务数量,然后调用cin.ignore(),丢弃剩余的换行符,再使用getline()读取任务字符串 - 使用
push_back()将每条任务描述添加到 vector 中 - 读取要删除的任务序号
- 验证任务序号是否在有效范围内(1 到 vector 的大小)
- 如果任务序号无效,输出错误消息
- 如果任务序号有效,使用
.erase()方法删除指定位置的任务 - 输出确认消息,说明删除了哪个任务
- 以带序号的列表形式显示剩余任务
- 显示更新后的任务总数
重要:混用 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++ 在线编译器