Golang 不处理 2 个操作

我是 golang 的新手,我不明白为什么我不能让下一个代码工作:


func ListApps(){

    fmt.Printf("\nPress Q to go back..\n")

    reader := bufio.NewReader(os.Stdin)

    input, _ := reader.ReadString('\n')


    if string(input) == "q" {

        fmt.Printf("OK")

     }

 }

我想打印一条消息,然后在控制台中扫描用户的输入,如果输入等于字符串“q”,则比较输入并打印 messafe。由于某些原因,上次检查不起作用。


小怪兽爱吃肉
浏览 162回答 2
2回答

慕的地6264312

来自 TFM:ReadString 读取直到输入中第一次出现 delim,返回一个包含数据的字符串,直到并包括分隔符您正在比较没有分隔符的字符串。所以只是这样做:if input == "q\n" {...}会工作(顺便说一句,不需要调用,string(input)因为输入已经是一个字符串)。或者,您也可以在检查之前使用strings.TrimRight. 这将使代码更具可移植性,因为它可以在\r\n用于分隔行的Windows 上工作。所以这样做:input = strings.TrimRight(input, "\r\n")if input == "q" {    fmt.Println("OK")}我已经测试过这个可以自己工作。

撒科打诨

Not_a_Golfer 是正确的为什么它不工作。但是,对于从 STDIN 读取之类的简单事情,您最好使用 Scanner:func ListApps(){    fmt.Printf("\nPress Q to go back..\n")    reader := bufio.NewScanner(os.Stdin)    reader.Scan()  // this line scans the STDIN for input    // error checking...    if err := scanner.Err(); err != nil {        panic(err)    }    // To access what the scanner got, you use scanner.Text() (reader.Text() in this case)    if reader.Text() == "q" {        fmt.Printf("OK")     } }无论输入来自何处(Windows 命令提示符、linux/OSX 上的终端等),这都将起作用
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go