golang中的input.scan()的关闭

在go程序设计语言中有这样一段代码

package main

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

func main() {
    
    
	counts := make(map[string]int)
	input := bufio.NewScanner(os.Stdin)
	for input.Scan() {
    
    
		counts[input.Text()]++
		}
	}
	fmt.Scan()
	fmt.Println(counts)
	for line, n := range counts {
    
    
		if n > 1 {
    
    
			fmt.Printf("%d\t%s\n", n, line)
		}
	}
}

启动后不会停止。打开源码可以看到注释
在这里插入图片描述
只有遇到EOF和错误的时候才会停止。
所以需要我们手动引发EOF
在windows下可以使用ctrl + z,在linux下可以使用ctrl + d原因是这样的

或者在代码中添加条件跳出循环

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

这样在空行就可以停止循环

猜你喜欢

转载自blog.csdn.net/majiayu000/article/details/128059808