Wie verwende ich die fmt.ScanfFunktion in Go, um eine ganzzahlige Eingabe von der Standardeingabe zu erhalten?
Wenn dies nicht möglich ist fmt.Scanf, wie kann man dann eine einzelne Ganzzahl am besten lesen?
Antworten:
http://golang.org/pkg/fmt/#Scanf
Alle in Go enthaltenen Bibliotheken sind gut dokumentiert.
Davon abgesehen glaube ich
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
macht den Trick
&iund nicht nur iwie in fmt.Printf("%v", i)?
iist nur der ganzzahlige Wert in i, &iist ein Zeiger auf i.
Eine Alternative, die etwas prägnanter sein kann, ist die Verwendung von fmt.Scan:
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
Hierbei wird anhand der Art des Arguments ermittelt, wie die Eingabe analysiert werden soll.
Hier ist meine "Fast IO" -Methode zum Lesen positiver Ganzzahlen. Es könnte durch Bit-Shifts und das vorherige Auslegen des Speichers verbessert werden.
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 ist einfacher als Golang fmt.Scanf (was einfacher ist als Clang scanf)
Wenn fmt.Scan-Fehler, dh wenn nicht null, protokollieren und zurückgeben
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)
Viel Glück
Beispiel von: http://www.sortedinf.com/?q=golang-in-1-hour
Sie können fmt.Scanfmit einem Formatbezeichner verwenden. Der Formatbezeichner für die Ganzzahl ist% d. Sie können also die Standardeingabe wie unten verwenden.
func main() {
var someVar int
fmt.Scanf("%d", &someVar)
}
oder Sie können fmt.Scanoder fmt.Scanlnwie unten verwenden.
func main() {
var someVar int
fmt.Scanln(&someVar)
}