登录
首页 >  Golang >  Go问答

如何在 Go 中使用 bufio 读取一行后,使用 fmt.Scan 读取字符串?

来源:stackoverflow

时间:2024-02-15 22:21:25 186浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《如何在 Go 中使用 bufio 读取一行后,使用 fmt.Scan 读取字符串?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

我用 bufio.newreader(os.stdin) 读取了一行,然后用 fmt.scanf 读取了一个字符串。

package main

import (
    "fmt"
    "bufio"
    "os"
    )

func main() {
    reader := bufio.newreader(os.stdin)
    
    var str string
    inp, _ := reader.readstring('\n')
    fmt.scanf("%s", &str)
    
    fmt.println(inp)
    fmt.printf(str)
}

输入:

this is a sentence.
john

我希望输出如上所示,但事实并非如此。

输出:

This is a sentence.

实际上 fmt.scanf("%s", &str) 不起作用。

问题是什么?以及如何修复它?


正确答案


reader.readstring(delim) 读取 delim 之前的所有内容,包括分隔符。因此,它在两个输入之间添加 \n。 fmt.printf(str) 最后没有 \n,因此第二个输出坚持打印到 stdout 的下一个内容。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.newreader(os.stdin)

    var str string
    inp, _ := reader.readstring('\n')
    fmt.scanf("%s", &str)

    fmt.println(inp)
    fmt.printf(str)
}

输入:

some line
john

输出:

some line

john

下面是按您希望的方式运行的代码。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)

    var str string
    inp, _ := reader.ReadString('\n')
    fmt.Scanf("%s", &str)

    fmt.Print(inp)
    fmt.Printf("%s\n", str)
}

终于介绍完啦!小伙伴们,这篇关于《如何在 Go 中使用 bufio 读取一行后,使用 fmt.Scan 读取字符串?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

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