Goでfmt.Scanf
関数を使用して、標準入力から整数入力を取得するにはどうすればよいですか?
fmt.Scanf
を使用してこれを実行できない場合、単一の整数を読み取る最良の方法は何ですか?
http://golang.org/pkg/fmt/#Scanf
Goに含まれるすべてのライブラリは、十分に文書化されています。
とはいえ、私は信じています
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
トリックをします
もう少し簡潔にできる代替方法は、fmt.Scan
を使用することです。
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
これは、引数のタイプのリフレクションを使用して、入力の解析方法を発見します。
正の整数を読み取るための「高速IO」メソッドを次に示します。ビットシフトとメモリの事前配置により改善できます。
package main
import (
"io/ioutil"
"bufio"
"os"
"strconv"
)
func main() {
out := bufio.NewWriter(os.Stdout)
ints := getInts()
var T int64
T, ints = ints[0], ints[1:]
..
out.WriteString(strconv.Itoa(my_num) + "\n")
out.Flush()
}
}
func getInts() []int64 {
//assumes POSITIVE INTEGERS. Check v for '-' if you have negative.
var buf []byte
buf, _ = ioutil.ReadAll(os.Stdin)
var ints []int64
num := int64(0)
found := false
for _, v := range buf {
if '0' <= v && v <= '9' {
num = 10*num + int64(v - '0') //could use bitshifting here.
found = true
} else if found {
ints = append(ints, num)
found = false
num = 0
}
}
if found {
ints = append(ints, num)
found = false
num = 0
}
return ints
}
Golang fmt.ScanはGolang fmt.Scanf(Clang scanfよりも簡単です)より簡単です
Fmt.Scanエラーが発生した場合、つまりnilでない場合、ログに記録して戻る
import (
"fmt"
"log"
)
var i int
if _, err := fmt.Scan(&i); err != nil {
log.Print(" Scan for i failed, due to ", err)
return
}
fmt.Println(i)
import (
"fmt"
"log"
)
var i, j, k int
if _, err := fmt.Scan(&i, &j, &k); err != nil {
log.Print(" Scan for i, j & k failed, due to ", err)
return
}
fmt.Println(i, j, k)
幸運を祈ります
func main(){
in:=bufio.NewScanner(os.Stdin)
in.Scan()
int,_:=strconv.Atoi(in.Text())
fmt.Println(int)
}
fmt.Scanf
をフォーマット指定子とともに使用できます。整数の形式指定子は%dです。そのため、以下のような標準入力を使用できます。
func main() {
var someVar int
fmt.Scanf("%d", &someVar)
}
または、以下のようにfmt.Scan
またはfmt.Scanln
を使用できます。
func main() {
var someVar int
fmt.Scanln(&someVar)
}