Comment utiliser la fonction fmt.Scanf
dans Go pour obtenir une entrée entière à partir de l'entrée standard?
Si cela ne peut pas être fait en utilisant fmt.Scanf
, quel est le meilleur moyen de lire un seul entier?
http://golang.org/pkg/fmt/#Scanf
Toutes les bibliothèques incluses dans Go sont bien documentées.
Cela étant dit, je crois
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
fait le tour
Une alternative qui peut être un peu plus concise consiste simplement à utiliser fmt.Scan
:
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
Ceci utilise la réflexion sur le type de l'argument pour découvrir comment l'analyse doit être analysée.
Voici ma méthode "Fast IO" pour lire les entiers positifs. Il pourrait être amélioré avec bitshifts et mise en mémoire à l'avance.
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 est plus simple que Golang fmt.Scanf (qui est plus simple que Clang scanf)
Si fmt.Scan est une erreur, sinon rien, connectez-vous et retournez
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)
Bonne chance
Exemple tiré de: http://www.sortedinf.com/?q=golang-in-1-hour
func main(){
in:=bufio.NewScanner(os.Stdin)
in.Scan()
int,_:=strconv.Atoi(in.Text())
fmt.Println(int)
}
Vous pouvez utiliser fmt.Scanf
avec un spécificateur de format. Le spécificateur de format pour l'entier est% d. Vous pouvez donc utiliser l’entrée standard comme ci-dessous.
func main() {
var someVar int
fmt.Scanf("%d", &someVar)
}
ou bien vous pouvez utiliser fmt.Scan
ou fmt.Scanln
comme ci-dessous.
func main() {
var someVar int
fmt.Scanln(&someVar)
}