gpt4 book ai didi

if-statement - reader.ReadString 不会去掉第一次出现的 delim

转载 作者:IT王子 更新时间:2023-10-29 01:36:05 27 4
gpt4 key购买 nike

我写了一个简单的 go 程序,但它没有正常工作:

package main

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

func main() {
reader := bufio.NewReader(os.Stdin)
fmt.Print("Who are you? \n Enter your name: ")
text, _ := reader.ReadString('\n')
if aliceOrBob(text) {
fmt.Printf("Hello, ", text)
} else {
fmt.Printf("You're not allowed in here! Get OUT!!")
}
}

func aliceOrBob(text string) bool {
if text == "Alice" {
return true
} else if text == "Bob" {
return true
} else {
return false
}
}

它应该要求用户说出它的名字,如果他是 Alice 或 Bob,则问候他,否则告诉他离开。 问题是,即使输入的名字是 Alice 或 Bob,它也会告诉用户离开。

爱丽丝:

/usr/lib/golang/bin/go run /home/jcgruenhage/go/workspace/src/github.com/jcgruenhage/helloworld/greet/greet.go
Who are you?
Enter your name: Alice
You're not allowed in here! Get OUT!!
Process finished with exit code 0

鲍勃:

/usr/lib/golang/bin/go run /home/jcgruenhage/go/workspace/src/github.com/jcgruenhage/helloworld/greet/greet.go
Who are you?
Enter your name: Bob
You're not allowed in here! Get OUT!!
Process finished with exit code 0

最佳答案

这是因为您的 text 正在存储 Bob\n

解决这个问题的一种方法是使用 strings.TrimSpace 来修剪换行符,例如:

import (
....
"strings"
....
)

...
if aliceOrBob(strings.TrimSpace(text)) {
...

或者,您也可以使用ReadLine代替ReadString,例如:

...
text, _, _ := reader.ReadLine()
if aliceOrBob(string(text)) {
...

之所以需要 string(text) 是因为 ReadLine 将返回给您 byte[] 而不是 string

关于if-statement - reader.ReadString 不会去掉第一次出现的 delim,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37100139/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com