已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题吗?**通过editing this post添加详细信息并阐明问题。
三年前就关门了。
Improve this question
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
in := bufio.NewReader(os.Stdin)
fmt.Println("Please input S: ")
S, _ := in.ReadString('\n')
fmt.Println("Please input J: ")
J, _ := in.ReadString('\n')
sum := numJewelsInStones(J,S)
fmt.Println(sum)
}
func numJewelsInStones(J string, S string) int {
var sum int
for _, s := range S {
for _, j := range J{
if s ==j {
sum ++
}
}
}
return sum
}
当我在终端输入“hello”和“h”时.这个程序将打印2,但预期是1。
如果我用fmt.Scanln(),结果是1.
是什么导致了这一结果?
1条答案
按热度按时间dgtucam11#
它们是完全不同的,而且大部分是不相关的。
bufio.NewReader()
“ Package 一个io.Reader或io.Writer对象,创建另一个对象(Reader或Writer),该对象也实现接口,但为文本I/O提供缓冲和一些帮助。换句话说,它所做的 * 全部 * 就是在
os.Stdin
上添加一个缓冲层(在您的示例中),它根本不对流进行解析或解释。相比之下,
fmt.Scanln()
从流中读取数据(该数据流可能被缓冲,也可能没有缓冲--即由bufio
包返回),通过空格分割输入,将其存储在切片中。通过阅读文档(我在上面已经链接到了),你可以了解每一个的具体细节。但是对于你的问题“有什么区别?”的直接答案是“绝对的一切。它们实际上没有任何共同之处,尽管它们可以一起使用。”