この記事は2020/06/29
にQrunchに掲載した内容です。
1行の入力を受け取る
1
2
3
4
5
6
7
8
| import "fmt"
func main() {
var a string
fmt.Scan(&a)
fmt.Println(a)
}
|
空白が入った入力を受け取る
fmt.Scanf
を利用した取得方法
空白で区切られた文字のブロック数があらかじめわかっている場合に利用と良い。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| import "fmt"
func main() {
var a string
var b string
var c int
fmt.Scanf("%s %s %d", &a, &b, &c)
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
// ↓結果イメージ↓
// aaa bbb 3
//
// aaa
// bbb
// 3
|
空白で区切られた文字のブロック数がそれぞれ変わる場合。
競プロでよくあるようなやつ。
1
2
hello world
1
2
3
4
5
6
7
8
9
10
11
12
| import "fmt"
func main() {
var inputWordLength string
fmt.Scan(&inputWordLength)
words := make([]string, inputWordLength)
for i:=0; i<inputWordLength; i++ {
fmt.Scanf("%d", &words[i])
fmt.Println(words[i])
}
}
|
fmt.Scan
は空白が入った時の標準入力をそのまま受け取ることができず、空白の前までの文字列が保存されるようになる。
とりあえず1行まるごと取得したいときはbufio
を使う。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| package main
import (
"fmt"
"os"
"bufio"
)
func main() {
stdin := bufio.NewScanner(os.Stdin)
stdin.Scan()
input := stdin.Text()
fmt.Println(input)
}
// ↓結果イメージ↓
// aaa bbb 3
//
// aaa bbb 3
|
参考