登录
首页 >  Golang >  Go问答

bufio.NewReader(os.Stdin) 和 fmt.Scanln() 有什么区别

来源:stackoverflow

时间:2024-05-01 17:00:45 371浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《bufio.NewReader(os.Stdin) 和 fmt.Scanln() 有什么区别》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

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。

是什么导致了这个结果?


解决方案


它们完全不同,而且大多不相关。

bufio.NewReader()“包装 io.Reader 或 io.Writer 对象,创建另一个也实现该接口但提供缓冲和文本 I/O 帮助的对象(Reader 或 Writer)”。 source

换句话说,它所做的就是向(在您的示例中)os.Stdin 添加一个缓冲层。它根本不解析或解释流。

相比之下,fmt.Scanln()从流中读取数据(可能会或可能不会缓冲——即由bufio包返回),用空格分割输入,将其存储在切片中。

通过阅读文档(我在上面链接到的文档),您可以获得每个文档的具体详细信息。但直接回答你的问题“有什么区别?”就是“绝对的一切。尽管它们可以一起使用,但它们几乎没有任何共同点。”

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>