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。
是什么导致了这个结果?
答案 0 :(得分:2)
它们是完全不同的,并且几乎没有关联。
bufio.NewReader()
“包装io.Reader或io.Writer对象,创建另一个对象(Reader或Writer),该对象也实现接口,但提供缓冲和一些文本I / O帮助”。 source。
换句话说, all 所做的就是在os.Stdin
中添加一个缓冲层(在您的示例中)。它根本不解析或解释流。
相反,fmt.Scanln()
从流中读取数据(可以缓冲也可以不缓冲,即由bufio
包返回),并按空格分隔输入,以将其存储在切片中
通过阅读文档(上面已链接到该文档),您可以获取每个文档的特定详细信息。但是直接回答您的问题“有什么区别?”简直就是“绝对的一切。尽管可以一起使用,但它们几乎没有共同点。”