Menu
CoddyTech

添加任务

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

challenge icon

挑战

简单

在任务管理的基础上,你现在将实现向系统添加新任务的核心功能。这个挑战要求你创建一个函数,将新任务追加到现有切片中,从而扩展任务列表。

重要提示:由于任务名称可能包含空格(例如 "Buy groceries"),你需要使用 bufio.Scanner 读取完整的输入行。fmt.Scanln 函数会在遇到第一个空格时停止读取,这会导致包含空格的任务名称无法正确读取。请使用 bufio.NewScanner(os.Stdin),并依次调用 scanner.Scan() 和 scanner.Text() 来读取完整的行。

你将收到两项输入:

  • 一个表示现有任务数量的字符串(例如 "2")
  • 一个包含任务名称的字符串,名称之间用逗号分隔(例如 "Buy groceries,Call dentist,Finish project")

你的任务是:

  1. 定义与上一个挑战相同的 Task 结构体,其中包含 Name(string)和 Completed(bool)字段
  2. 创建一个名为 addTask 的函数,该函数接收一个由 Task 结构体组成的切片和一个任务名称(string)作为参数
  3. addTask 函数应返回一个添加了新任务的切片(新任务的 Completed 应设为 false)
  4. 使用 bufio.Scanner 正确读取输入行,以处理包含空格的任务名称
  5. 根据第一项输入中指定的现有任务数量,创建初始任务切片:
    • 如果数量是 "0",则从空切片开始
    • 如果数量大于 "0",则创建相应数量的占位任务,名称类似 "Existing Task 1"、"Existing Task 2" 等,并将它们全部标记为未完成
  6. 解析第二项输入中以逗号分隔的任务名称
  7. 使用你的 addTask 函数将每个新任务添加到切片中
  8. 按照以下格式打印最终切片中的每个任务:"Task: [name], Completed: [true/false]"
  9. 按照以下格式打印任务总数:"Total tasks: [count]"

例如,如果你有 1 个现有任务,并想添加 "Buy groceries,Call dentist",输出应先显示现有任务,再显示两个新任务,最后显示任务总数。这个挑战将练习使用 append 函数操作切片,并演示如何构建扩展数据结构的功能。

亲手试试

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

type Task struct {
	Name      string
	Completed bool
}

// TODO: 在这里创建 addTask 函数

func main() {
	// 创建 scanner,用于读取每行输入
	scanner := bufio.NewScanner(os.Stdin)
	
	// 读取现有任务的数量
	scanner.Scan()
	existingTasksStr := scanner.Text()
	
	// 读取任务名称
	scanner.Scan()
	taskNamesStr := scanner.Text()
	
	// TODO: 完成实现
	// 1. 将 existingTasksStr 转换为整数
	// 2. 创建包含现有任务的初始切片
	// 3. 解析 taskNamesStr 并添加新任务
	// 4. 输出所有任务和任务总数
}

逻辑与流程中的所有课

自己练习: Go 在线编译器