Go言語

【Go言語】fmtパッケージで標準入力を受け取る

AtCoderやpaiza、コーディングテストで「標準入力から値を受け取る」処理を書く必要があります。

最近、AtCoderを始めたので、fmtパッケージで標準入力を受け取る方法をまとめてみます。

(bufioパッケージを使う方法は、そのうち...)

fmt.Scan

func Scan(a ...interface{}) (n int, err error) ( https://golang.org/pkg/fmt/#Scan )

スペース区切りの値を1つずつ順に読み込み、読み込み成功した数とエラーを返す。
※ 改行もスペースとして扱われる

例えば、「1 2」という標準入力だった場合、「1」を読み込み、次に「2」を読み込む。そのため、値を格納する変数は2つ必要。

package main

import (
	"fmt"
)

func main() {
	var a, b int

	n, _ := fmt.Scan(&a, &b)
	fmt.Printf("Scan個数: %d\n", n)
	fmt.Println(a, b)
}

実行すると↓↓↓な感じ。

fmt.Scan実行結果

 

次のように、1行目に入力されるデータ数があり、その後複数行の入力があるとき

5 // ← データ数
1 // 以下、入力データ
2
3
4
5

次のように、入力データをスライスに格納。

package main

import (
	"fmt"
)

func main() {
	var n int
	fmt.Scan(&n)
	inputs := make([]int, n)
	for i := 0; i < n; i++ {
		fmt.Scan(&inputs[i])
	}

	fmt.Println(inputs)
}

 

fmt.Scanln

func Scanln(a ...interface{}) (n int, err error) ( https://golang.org/pkg/fmt/#Scanln )

Scanln は Scan と同じだが、改行でスキャン終了する。また、最後の項目の後にも改行またはEOFが必要。

-Go言語

© 2021 フリエン生活 Powered by AFFINGER5