如何使用Go中的fmt.Scanf
函数从标准输入中获取整数输入?
如果使用fmt.Scanf
无法做到这一点,那么读取单个整数的最佳方法是什么?
答案 0 :(得分:115)
http://golang.org/pkg/fmt/#Scanf
Go中包含的所有库都有详细记录。
话虽如此,我相信
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
诀窍
答案 1 :(得分:47)
可以更简洁的替代方法是使用fmt.Scan
:
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
这使用对参数类型的反射来发现应该如何解析输入。
答案 2 :(得分:3)
这是我用于读取正整数的“快速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
}
答案 3 :(得分:3)
Golang fmt.Scan比Golang fmt.Scanf简单(比Clang scanf简单)
如果fmt.Scan错误,即如果不是nil,则log&amp;返回
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)
祝你好运
答案 4 :(得分:0)
CASE
WHEN CHAR_LENGTH(TRIM(some_string_date)) = 8
THEN
CAST(
SUBSTRING(TRIM(some_string_date) FROM 1 FOR 4)
|| '-'
|| SUBSTRING(TRIM(some_string_date) FROM 5 FOR 2)
||'-'
|| SUBSTRING(TRIM(some_string_date) FROM 7 FOR 2)
as DATE)
ELSE
NULL
END
答案 5 :(得分:0)
您可以将fmt.Scanf
与格式说明符一起使用。整数的格式说明符为%d。因此,您可以使用如下所示的标准输入。
func main() {
var someVar int
fmt.Scanf("%d", &someVar)
}
否则您可以按以下方式使用fmt.Scan
或fmt.Scanln
。
func main() {
var someVar int
fmt.Scanln(&someVar)
}