终端输入与预期结果不符
Terminal input doesn't match expected result
我是 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")
}
我运行程序并输入了我的名字nixon
为什么fmt.Println(name == "nixon")
的输出总是false
?
修改您的主要功能如下:
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter name:")
name, err := reader.ReadString('\n')
if err != nil {
panic(err)
}
name = strings.TrimSuffix(name, "\n")
fmt.Println(name == "nixon")
}
我添加到您的代码中的行从您的输入中删除了新行字符。
func (b *Reader) ReadString(delim byte) (string, error)
ReadString reads until the first occurrence of delim in the input,
returning a string containing the data up to and including the
delimiter.
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
Trim 尾随换行符。例如,
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
我是 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")
}
我运行程序并输入了我的名字nixon
为什么fmt.Println(name == "nixon")
的输出总是false
?
修改您的主要功能如下:
func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter name:")
name, err := reader.ReadString('\n')
if err != nil {
panic(err)
}
name = strings.TrimSuffix(name, "\n")
fmt.Println(name == "nixon")
}
我添加到您的代码中的行从您的输入中删除了新行字符。
func (b *Reader) ReadString(delim byte) (string, error)
ReadString reads until the first occurrence of delim in the input, returning a string containing the data up to and including the delimiter.
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
Trim 尾随换行符。例如,
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