🦁
Go言語 標準入力 【自分用まとめ】
概要
Go言語で競技プログラミングを参加するときに、Go言語での標準入力を調べたので本記事で自分用にまとめました。
fmt.Scanを使用した標準入力
fmt.Scan(&標準入力で受けとった値を格納する変数)
スペース、改行までを一つの入力として受け取る
【標準入力で、1つの値を標準入力で受け取る】
main.go
package main
import "fmt"
func main() {
var num int
fmt.Scan(&num)
fmt.Println(num)
}
//ターミナル
$ go run main.go
999
//出力
999
標準入力で、複数の値を標準入力で受け取る_パターン1
複数の値を、標準入力で受け取る場合
受け取る値の数が決まっているパターン
main.go
package main
import "fmt"
func main() {
var num1, num2, num3 int
fmt.Scan(&num1, &num2, &num3)
fmt.Println(num1, num2, num3)
}
//ターミナル
$ go run main.go
111 222 333
//出力
111 222 333
標準入力で、複数の値を標準入力で受け取る_パターン2
複数の値を、標準入力で受け取る場合
受け取る値の数が決まっていないパターン
main.go
package main
import "fmt"
func main() {
//標準入力で受け取る値の個数を格納
var len int
fmt.Scan(&len)
//標準入力を受け取り、格納
slice := make([]int, len)
for i := 0; i < len; i++ {
fmt.Scan(&slice[i])
}
fmt.Println(slice)
}
//ターミナル
$ go run main.go
3 111 222 333
//出力
[111 222 333]
bufioパッケージを使用する
fmt.Scan
は大量のデータを読み込むときに、スピードが遅くなります。bufio
は読み込みスピードで、fmt.Scan
より優れています。
一方で、入力された値を文字列として格納するので、数値型で処理したいときはキャストする必要があります。
bufio 使い方1_基本
bufioは1行分の標準入力を受け取る
main.go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin) // スキャナを作成
scanner.Scan() // 1行分の入力を取得
str := scanner.Text()
fmt.Print(str)
}
bufio 使い方1_スペース区切り
スペース区切りの文字を、受け取る
main.go
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
slice := strings.Split(scanner.Text(), " ")
for _, str := range slice {
fmt.Println(str)
}
}
//ターミナル
go run main.go
111 222 333
//出力
111
222
333
bufio 使い方1_複数行
複数行を受け取る
main.go
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
var n int
n = 3
var str []string
scanner := bufio.NewScanner(os.Stdin)
for i := 0; i < n; i++ {
scanner.Scan()
str = append(str, scanner.Text())
}
fmt.Println(str)
}
$ go run main.go
111
222
333
//出力
[111 222 333]
Discussion