go - procedimiento - Lectura de un entero a partir de la entrada estándar
convertir fracciones a decimales y viceversa (4)
Aquí está mi método "Fast IO" para leer enteros positivos. Se podría mejorar con cambios de bits y disposición de memoria con antelación.
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
}
¿Cómo uso la función fmt.Scanf
en Go para obtener una entrada entera de la entrada estándar?
Si esto no se puede hacer usando fmt.Scanf
, ¿cuál es la mejor manera de leer un solo entero?
Golang fmt.Scan es más simple que Golang fmt.Scanf (que es más simple que Clang scanf)
If fmt.Scan errors, es decir, si no es nulo, log y devuelve
1 variable única de lectura:
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)
2 Leer múltiples variables:
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)
La mejor de las suertes
Ejemplo de: http://www.sortedinf.com/?q=golang-in-1-hour
Una alternativa que puede ser un poco más conciso es simplemente usar fmt.Scan
:
package main
import "fmt"
func main() {
var i int
fmt.Scan(&i)
fmt.Println("read number", i, "from stdin")
}
Esto utiliza la reflexión sobre el tipo de argumento para descubrir cómo debe analizarse la entrada.
http://golang.org/pkg/fmt/#Scanf
Todas las bibliotecas incluidas en Go están bien documentadas.
Dicho eso, creo
func main() {
var i int
_, err := fmt.Scanf("%d", &i)
}
Hace el truco