小编典典

终端输入与预期结果不符

go

我是新手。

我在下面编写了程序,以允许用户输入名称。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter name:")
    name, err := reader.ReadString('\n')
    if err != nil {
        panic(err)
    }

    fmt.Println(name == "nixon")
}

我运行了程序并输入了 尼克松的* 名字 *

为什么fmt.Println(name == "nixon")总是输出false


阅读 191

收藏
2020-07-02

共1个答案

小编典典

func(* Reader)ReadString

func (b *Reader) ReadString(delim byte) (string, error)

ReadString读取直到输入中第一次出现delim为止,并返回一个字符串,其中包含直到定界符(包括定界符)的数据。


name终端输入包括尾随换行符。例如,

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter name:")
    name, err := reader.ReadString('\n')
    if err != nil {
        panic(err)
    }
    fmt.Printf("%q\n", name)

    fmt.Println(name == "nixon")
}

输出(Linux):

Enter name:nixon
"nixon\n"
false

输出(Windows):

Enter name:nixon
"nixon\r\n"
false

修剪尾随换行符。例如,

package main

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

func main() {
    reader := bufio.NewReader(os.Stdin)

    fmt.Print("Enter name:")
    name, err := reader.ReadString('\n')
    if err != nil {
        panic(err)
    }
    fmt.Printf("%q\n", name)
    name = strings.TrimRight(name, "\r\n")
    fmt.Printf("%q\n", name)

    fmt.Println(name == "nixon")

}

输出(Linux):

Enter name:nixon
"nixon\n"
"nixon"
true

输出(Windows):

Enter name:nixon
"nixon\r\n"
"nixon"
true
2020-07-02