go - 使用 bufio 读取 Go 中的一行后,如何使用 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,所以第二个输出坚持打印到标准输出的下一个内容。
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)
}