为了账号安全,请及时绑定邮箱和手机立即绑定

reader.ReadString 不会删除第一次出现的 delim

reader.ReadString 不会删除第一次出现的 delim

Go
红糖糍粑 2022-01-10 14:27:45
我写了一个简单的 go 程序,但它不能正常工作:package mainimport (    "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.goWho are you? Enter your name: AliceYou'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.goWho are you? Enter your name: BobYou're not allowed in here! Get OUT!!Process finished with exit code 0
查看完整描述

3 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

这是因为您的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.


查看完整回答
反对 回复 2022-01-10
?
繁星coding

TA贡献1797条经验 获得超4个赞

我认为这里混乱的根源是:

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

不删除\n,而是将其保留为最后一个值,并忽略它之后的所有内容。

ReadString 读取直到输入中第一次出现 delim,返回一个字符串,其中包含直到并包括分隔符的数据。

https://golang.org/src/bufio/bufio.go?s=11657:11721#L435

然后你最终比较AliceAlice\n。因此,正如@ch33hau 所指出的,解决方案是要么Alice\n在你的aliceOrBob函数中使用,要么以不同的方式读取输入。


查看完整回答
反对 回复 2022-01-10
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

我对 Go 一无所知,但您可能想要去掉前导或尾随空格和其他空格(制表符、换行符等)字符的字符串。


查看完整回答
反对 回复 2022-01-10
  • 3 回答
  • 0 关注
  • 182 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信