完善工具
本课属于 Coddy C++ 学习旅程的“逻辑与流程”单元。第 22 课,共 56 课。
挑战
简单通过实现将所有功能串联起来的主程序循环,完成你的任务列表工具。这最后一课会创建一个功能完整的任务管理应用,它会反复显示菜单并处理用户命令,直到用户选择退出。
将提供以下输入:
- 一系列菜单选项(整数:1 表示添加任务,2 表示查看任务,3 表示移除任务,4 表示退出)
- 对于添加任务(选项 1):表示任务描述的字符串
- 对于移除任务(选项 3):表示要移除的任务编号的整数(索引从 1 开始)
你的程序应当:
- 使用与前几课相同的设置开始(创建一个名为
tasks的空std::vector<std::string>,并显示欢迎消息) - 创建一个主循环,在用户选择退出之前持续运行
- 每次循环迭代时显示菜单并读取用户的选项
- 处理每个菜单选项:
- 选项 1:读取任务描述,并使用
push_back()添加任务 - 选项 2:以编号形式显示所有任务;如果列表为空,则显示 "No tasks available."
- 选项 3:读取任务编号,验证编号,并使用
.erase()移除任务 - 选项 4:退出程序循环
- 选项 1:读取任务描述,并使用
- 如果菜单选项无效,则显示错误消息并继续循环
- 用户退出时显示告别消息
使用以下确切的输出格式:
初始设置和菜单显示:
Welcome to Task List Tool!
Menu Options:
1. Add Task
2. View Tasks
3. Remove Task
4. Quit
Task list system initialized and ready!每次菜单循环迭代时,显示:
Choose an option: 添加任务(选项 1)时:
Task "[task description]" added successfully!
Total tasks: [number of tasks]查看任务(选项 2),且列表中有任务时:
Your Tasks:
1. [first task]
2. [second task]
...
Total tasks: [number of tasks]查看任务(选项 2),且列表为空时:
No tasks available.移除任务(选项 3),且任务编号有效时:
Task "[removed task description]" removed successfully!
Remaining Tasks:
1. [first remaining task]
...
Total tasks: [updated number of tasks]移除任务(选项 3),且任务编号无效时:
Error: Invalid task number. Please enter a number between 1 and [total tasks].菜单选项无效时:
Invalid choice. Please try again.用户退出时(选项 4):
Thank you for using Task List Tool!使用一个 while 循环,在用户输入 4 之前持续运行。实现移除任务功能时,请记得先验证任务编号是否在 1 到 tasks.size() 之间,再使用 tasks.erase(tasks.begin() + index)。如果移除后列表变为空,请打印 "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;
std::cin.ignore();
for (int i = 0; i < n; i++) {
std::string task;
std::getline(std::cin, task);
tasks.push_back(task);
}
int taskNumber;
std::cin >> taskNumber;
if (taskNumber < 1 || taskNumber > tasks.size()) {
std::cout << "Error: Invalid task number. Please enter a number between 1 and " << tasks.size() << "." << std::endl;
} else {
std::string removedTask = tasks[taskNumber - 1];
tasks.erase(tasks.begin() + (taskNumber - 1));
std::cout << "Task \"" << removedTask << "\" removed successfully!" << std::endl;
if (tasks.empty()) {
std::cout << "No tasks remaining." << std::endl;
} else {
std::cout << "Remaining 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++ 在线编译器