gpt4 book ai didi

go - golang中使用bufio.Scanner时如何继续执行程序

转载 作者:IT王子 更新时间:2023-10-29 02:26:57 24 4
gpt4 key购买 nike

请原谅我刚开始使用 Go,我正在学习 bufio 包,但每次我使用 Scanner 类型时,命令行都会卡在输入上,无法继续正常的程序流程。我试过按 Enter 键,但它总是换行。

这是我的代码。

/*
Dup 1 prints the text of each line that appears more than
once in the standard input, proceeded by its count.
*/
package main

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

func main(){
counts := make(map[string]int)
fmt.Println("Type Some Text")
input := bufio.NewScanner(os.Stdin)

for input.Scan(){
counts[input.Text()]++
}
//NOTE: Ignoring potential Errors from input.Err()

for line,n := range counts{
if n > 1{
fmt.Printf("%d \t %s \n",n,line)
}
}
}

最佳答案

您有一个 for 循环,它从标准输入中读取行。只要 os.Stdin 不报告 io.EOF(这是 Scanner.Scan() 会返回的一种情况),此循环就会运行错误)。通常这不会发生。

如果你想“模拟”输入结束,在 Windows 上按 Ctrl+Z,或 Ctrl+D 在 Linux/unix 系统上。

因此输入一些行(每行由Enter“关闭”),完成后,按上面提到的键。

示例输出:

Type Some Text
a
a
bb
bb
bbb <-- CTRL+D pressed here
2 a
2 bb

另一种选择是使用“特殊”词来终止,例如“exit”。它可能看起来像这样:

for input.Scan() {
line := input.Text()
if line == "exit" {
break
}
counts[line]++
}

测试它:

Type Some Text
a
a
bb
bb
bbb
exit
2 a
2 bb

关于go - golang中使用bufio.Scanner时如何继续执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54037124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com