Estoy buscando el equivalente Go de scanf(). he intentado con el código siguiente:En busca de Go equivalente de scanf
1 package main
2
3 import (
4 "scanner"
5 "os"
6 "fmt"
7)
8
9 func main() {
10 var s scanner.Scanner
11 s.Init(os.Stdin)
12 s.Mode = scanner.ScanInts
13 tok := s.Scan()
14 for tok != scanner.EOF {
15 fmt.Printf("%d ", tok)
16 tok = s.Scan()
17 }
18 fmt.Println()
19 }
lo funciono con el aporte de un texto con una línea de números enteros. Pero siempre sale -3 -3 ...
¿Y cómo escanear una línea compuesta de una cadena y algunos enteros? ¿Cambiando el modo siempre que encuentre un nuevo tipo de datos?
La documentación del paquete:
escáner paquete
Un escáner de propósito general para UTF-8 texto codificado.
Pero parece que el escáner no es para uso general.
código Actualizado:
func main() {
n := scanf()
fmt.Println(n)
fmt.Println(len(n))
}
func scanf() []int {
nums := new(vector.IntVector)
reader := bufio.NewReader(os.Stdin)
str, err := reader.ReadString('\n')
for err != os.EOF {
fields := strings.Fields(str)
for _, f := range fields {
i, _ := strconv.Atoi(f)
nums.Push(i)
}
str, err = reader.ReadString('\n')
}
r := make([]int, nums.Len())
for i := 0; i < nums.Len(); i++ {
r[i] = nums.At(i)
}
return r
}
Versión mejorada:
package main
import (
"bufio"
"os"
"io"
"fmt"
"strings"
"strconv"
"container/vector"
)
func main() {
n := fscanf(os.Stdin)
fmt.Println(len(n), n)
}
func fscanf(in io.Reader) []int {
var nums vector.IntVector
reader := bufio.NewReader(in)
str, err := reader.ReadString('\n')
for err != os.EOF {
fields := strings.Fields(str)
for _, f := range fields {
if i, err := strconv.Atoi(f); err == nil {
nums.Push(i)
}
}
str, err = reader.ReadString('\n')
}
return nums
}
Para obtener buenas respuestas, necesita hacer que sus preguntas sean fáciles de responder. Por ejemplo, código que se puede copiar, pegar y compilar fácilmente. El complemento Go no acepta números de línea; no los pongas en tu código de muestra. – peterSO
Quizás esto no existió cuando se publicó originalmente, pero ve tiene fmt.Scanf que funciona igual que C scanf obteniendo de stdin: var número int fmt.Scanf ("% d", y número) – Myforwik
¡Oh, Dios mío! He estado intentando durante horas obtener un buen lector de stdin. Hombre, no pude entender cómo escribirlo. Muchas gracias por publicar su código –