fmt.ScanfStandart girişten bir tamsayı girişi almak için Go'daki işlevi nasıl kullanırım ?
Bu kullanılarak yapılamazsa fmt.Scanf, tek bir tamsayıyı okumanın en iyi yolu nedir?
Yanıtlar:
http://golang.org/pkg/fmt/#Scanf
Go'da bulunan tüm kitaplıklar iyi bir şekilde belgelenmiştir.
Söyleniyor, inanıyorum
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
hile yapar
&iolduğu igibi girmemiz gerektiğini açıklayabilir misiniz fmt.Printf("%v", i)?
isadece tamsayı değeridir i, &ibir işaretçidir i.
scanner := bufio.NewScanner(os.Stdin)
Biraz daha özlü olabilecek bir alternatif, sadece kullanmaktır fmt.Scan:
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
Bu, girdinin nasıl çözümlenmesi gerektiğini keşfetmek için bağımsız değişkenin türüne ilişkin yansımayı kullanır.
İşte pozitif tam sayıları okumak için benim "Hızlı GÇ" yöntemim. Bit kaydırmalarla ve önceden bellek yerleştirilerek geliştirilebilir.
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'den daha basittir (Clang scanf'den daha basittir)
Fmt.Scan hataları, yani sıfır değilse, günlüğe kaydet ve döndür
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)
İyi şanslar
fmt.ScanfBir format belirticisi ile kullanabilirsiniz . Tamsayı için biçim belirticisi% d'dir. Böylece aşağıdaki gibi standart girişi kullanabilirsiniz.
func main() {
var someVar int
fmt.Scanf("%d", &someVar)
}
veya aşağıdaki gibi fmt.Scanveya kullanabilirsiniz fmt.Scanln.
func main() {
var someVar int
fmt.Scanln(&someVar)
}