首先是最基本的,也是最常用的就是fmt包了。
关于输出,这个不用多提,实际上就用fmt.Print(n),即可解决大部分问题。
我个人比较习惯用fmt.Scan(&n),意思就是把控制台下一个不是空格和回车的值送到n所在的地址单元。n就是这个值。一般写题时很常见。
fmt.Scanln与其同理,但会换行。
比如一行输入三个数,a,b,c,我们就可以fmt.Scanln(&a,&b,&c)
在碰到一般的题目时,我更建议用Scan,因为确保不会漏输入,而且不用担心换行出问题。你也可以在里面放数组元素。
以下是示例:
这是非常常见的用法,写习惯了也挺快。
在此基础上,我们可以研究下一个问题,如何处理文件的读入呢?这里可以用openfile
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
openTxt("d:/Desktop/area.txt")
}
func openTxt(txt string) string {
filePath := txt
file, err := os.Open(filePath)
if err != nil {
fmt.Println("文件打开失败 = ", err)
return ""
}
defer file.Close() // 关闭文本流
reader := bufio.NewReader(file) // 读取文本数据
for {
str, err := reader.ReadLine() //按行读取
if err ==io.EOF {
break
}
fmt.Print(str)
}
fmt.Println("文件读取结束")
return ""
}
转载自golang读取txt文件,获取每行文字。_go读取txt文件每行的首单词_JerryKit的博客-CSDN博客
总之就是openfile,按行读取。
当然,在熟练掌握以上方法后,我觉得仍然有更好的方式,就是bufio包,这个经常会看到有竞赛中的模板,但一直不知道如何使用,今天就把它研究明白。
这是解析,我直接给具体用法,来的比较直观一点。
scanner := bufio.NewScanner(os.Stdin) //扫描器
scanner.Buffer(make([]byte, 4096), 100000) //缓冲区大小
scanner.Split(bufio.ScanWords)//指定读入方式
n, _ = strconv.ParseInt(scanner.Text(), 10, 64)//读入数据的类型
var m int64
scanner.Scan() //相当于next,继续读
m, _ = strconv.ParseInt(scanner.Text(), 10, 64)