为了账号安全,请及时绑定邮箱和手机立即绑定

接收用户输入的简单 CLI

接收用户输入的简单 CLI

Go
繁星点点滴滴 2023-02-14 18:14:05
当我输入命令时,在按下回车按钮之前给一个空格,它工作正常,但如果没有空格则不起作用我已经尝试了几种方法来解决这个问题,但一直无法解决import (    "bufio"    "fmt"    "os"    "strings")    func main() {        var notes []string        for {            fmt.Print("Enter a command and data: ")            reader := bufio.NewReader(os.Stdin)            line, _ := reader.ReadString('\n')            var joinedNote string            var note []string                splittedString := strings.Split(line, " ")                if splittedString[0] == "create" && len(splittedString) > 1 {                i := 1                for ; i < len(splittedString); i++ {                    note = append(note, splittedString[i])                }                joinedNote = strings.Join(note, "")                notes = append(notes, joinedNote)                fmt.Println("[OK] The note was successfully created")            }            if splittedString[0] == "list" || string(line) == "list" {                for i, noteList := range notes {                    newNote := strings.TrimSpace(noteList)                    fmt.Printf("[Info] %d: %s!\n", i, newNote)                }            }            if splittedString[0] == "clear" || line == "clear" {                notes = nil                fmt.Println("[OK] All notes were successfully deleted")            }                if splittedString[0] == "exit" || line == "exit" {                fmt.Println("[Info] Bye!")                os.Exit(0)            }        }    }
查看完整描述

1 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

这样做的原因是你包括了\n你从用户那里捕获的行,并且它后面没有空格,被\n标记到你正在寻找的词上(create\n不等于create)。解决此问题的最简单方法是手动删除\n尾随line = line[:len(line)-1].

这是一个更深入的潜水。首先,该ReadString方法说它包含定界符,在这种情况下\n,您给它:

ReadString 一直读取到输入中第一次出现 delim,返回一个包含数据的字符串,直到并包括分隔符。所以我们知道除非您手动删除它,否则它的末尾line总是有。\n

当单词后跟一个空格时,您的代码有效,因为您strings.Split(line," ")将输入转换create \n{"create","\n"}.


查看完整回答
反对 回复 2023-02-14
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信