我写了一个简单的 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.
繁星coding
TA贡献1797条经验 获得超4个赞
我认为这里混乱的根源是:
text, _ := reader.ReadString('\n')
不删除\n
,而是将其保留为最后一个值,并忽略它之后的所有内容。
ReadString 读取直到输入中第一次出现 delim,返回一个字符串,其中包含直到并包括分隔符的数据。
https://golang.org/src/bufio/bufio.go?s=11657:11721#L435
然后你最终比较Alice
和Alice\n
。因此,正如@ch33hau 所指出的,解决方案是要么Alice\n
在你的aliceOrBob
函数中使用,要么以不同的方式读取输入。
- 3 回答
- 0 关注
- 182 浏览
添加回答
举报
0/150
提交
取消