2010-09-20 14 views

Répondre

97

http://golang.org/pkg/fmt/#Scanf

Toutes les bibliothèques incluses dans Go sont bien documentés.

Cela étant dit, je crois

func main() { 
    var i int 
    _, err := fmt.Scanf("%d", &i) 
} 

fait l'affaire

+0

fmt.Scanf a pris environ une minute pour analyser 1 million entiers. –

+0

@robertking essayez d'utiliser un bufio c'est plutôt un exemple simple. – cthom06

+0

Cheers. Bufio est rapide. –

37

Une alternative qui peut être un peu plus concis consiste à utiliser simplement fmt.Scan:

package main 

import "fmt" 

func main() { 
    var i int 
    fmt.Scan(&i) 
    fmt.Println("read number", i, "from stdin") 
} 

Il utilise la réflexion sur le type de l'argument pour découvrir comment l'entrée doit être analysée.

http://golang.org/pkg/fmt/#Scan

+14

Vous ne devriez pas faire cela sans vérifier les erreurs;) – kyrias

3

Voici ma méthode "Fast IO" pour la lecture des nombres entiers positifs. Il pourrait être amélioré avec les bitshifts et la disposition de la 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 
} 
1

golang fmt.Scan est plus simple que golang fmt.Scanf (ce qui est plus simple que Clang scanf)

Si des erreurs fmt.Scan à savoir sinon nul, log & retour

1 Lire simple variable:

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 Lire plusieurs 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) 

Bonne chance

Exemple de: http://www.sortedinf.com/?q=golang-in-1-hour