我正在尝试并Go编写了一些代码来检查是否输入了y或n :
reader := bufio.NewReader(os.Stdin)
fmt.Print("(y / n): ")
text, _ := reader.ReadString('\n')
text = strings.ToLower(text)
if strings.Compare(text, "y") == 0 {
fmt.Println("True")
} else {
fmt.Println("Else")
}
Run Code Online (Sandbox Code Playgroud)
当我运行此代码并输入y(并按 Enter)时,我希望看到True但我得到Else- 谁能明白为什么?
您很可能想要这样的东西:
reader := bufio.NewReader(os.Stdin)
fmt.Print("(y / n): ")
text, _ := reader.ReadString('\n')
text = strings.ToLower(text[0:len(text)-1])
if strings.Compare(text, "y") == 0 {
fmt.Println("True")
} else {
fmt.Println("Else")
}
Run Code Online (Sandbox Code Playgroud)
正如上面的评论所说,ReadString()将分隔符作为字符串的一部分返回。所以你得到“y\n”并与“y”进行比较 - 结果是错误的。(您可能更愿意使用该Trim()函数来删除输入两侧的所有空格!)
编辑:Trim()建议应始终优先于原始建议。否则会产生不可移植的代码,如本答案的注释所示。完整修改后的代码:
reader := bufio.NewReader(os.Stdin)
fmt.Print("(y / n): ")
text, _ := reader.ReadString('\n')
text = strings.ToLower(strings.Trim(text," \r\n"))
if strings.Compare(text, "y") == 0 {
fmt.Println("True")
} else {
fmt.Println("Else")
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4196 次 |
| 最近记录: |