go入门之像cpp一样输入效果

在hackerrank上面练习的时候,被读到eof难住了,故总结一下;
学习一下fmt和bufio.

读一整行

cpp:

1
2
3
4
5
6
//读一行
gets(s);
读到eof
for(; gets(s);){
// do something
}

go:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
//利用scanner读一行,返回的是字符串
func main() {
scanner := bufio.NewScanner(os.Stdin)
//读一行
scanner.Scan()
fmt.Println(scanner.Text())
//读到eof
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
///////////////
//利用Reader返回的是ascii码集合,需要转和判断error,比较麻烦
func main() {
reader := bufio.NewReader(os.Stdin)
//读一行
a, b, err := reader.ReadLine()
if err == nil {
fmt.Println(string(a), b)
}
//读到eof
for {
a, b, err := reader.ReadLine()
if err != nil {
break
}
fmt.Println(string(a), b)
}
}

自定义读到EOF

cpp:

1
2
3
for(; ~scanf("xxx");){
// do something
}

go:

1
2
3
4
5
6
7
8
9
10
func main(){
var a string
var b int
for {
n, err := fmt.Scan(&a, &b)
if err != nil || 2 != n {
break
}
fmt.Println(a, b)
}

留言

2018-06-29