當我輸入命令時,在按下回車按鈕之前給一個空格,它工作正常,但如果沒有空格則不起作用我已經嘗試了幾種方法來解決這個問題,但一直無法解決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"}
.
- 1 回答
- 0 關注
- 108 瀏覽
添加回答
舉報
0/150
提交
取消