猿问

接收用户输入的简单 CLI

当我输入命令时,在按下回车按钮之前给一个空格,它工作正常,但如果没有空格则不起作用


我已经尝试了几种方法来解决这个问题,但一直无法解决


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)

            }

        }

    }


繁星点点滴滴
浏览 78回答 1
1回答

汪汪一只猫

这样做的原因是你包括了\n你从用户那里捕获的行,并且它后面没有空格,被\n标记到你正在寻找的词上(create\n不等于create)。解决此问题的最简单方法是手动删除\n尾随line = line[:len(line)-1].这是一个更深入的潜水。首先,该ReadString方法说它包含定界符,在这种情况下\n,您给它:ReadString 一直读取到输入中第一次出现 delim,返回一个包含数据的字符串,直到并包括分隔符。所以我们知道除非您手动删除它,否则它的末尾line总是有。\n当单词后跟一个空格时,您的代码有效,因为您strings.Split(line," ")将输入转换create \n为{"create","\n"}.
随时随地看视频慕课网APP

相关分类

Go
我要回答