मानक इनपुट से पूर्णांक पढ़ना


85

fmt.Scanfमानक इनपुट से पूर्णांक इनपुट प्राप्त करने के लिए मैं गो में फ़ंक्शन का उपयोग कैसे करूं ?

यदि इसका उपयोग नहीं किया जा सकता है fmt.Scanf, तो एक पूर्णांक पढ़ने का सबसे अच्छा तरीका क्या है?

जवाबों:


132

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

गो में शामिल सभी पुस्तकालय अच्छी तरह से प्रलेखित हैं।

कहा जा रहा है, मुझे विश्वास है

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

उसने चाल चली


fmt.Scanf ने 1 मिलियन पूर्णांकों को स्कैन करने में लगभग एक मिनट का समय लिया।
रॉबर्ट राजा

इसके बजाय एक सरल उदाहरण का उपयोग करते हुए @robertking कोशिश करें।
cthom06

चीयर्स। बुफियो तेज है।
रॉबर्ट किंग

5
क्या आप बता सकते हैं कि हमें प्रवेश क्यों करना चाहिए &iऔर न कि iजैसा fmt.Printf("%v", i)?
Zeynel

6
@Zeynel क्योंकि मापदंडों को गो में मान द्वारा पारित किया जाता है। iमें पूर्णांक मान है i, के &iलिए एक सूचक है i
cthom06

48

एक विकल्प जो थोड़ा अधिक संक्षिप्त हो सकता है, वह है बस उपयोग करना fmt.Scan:

package main

import "fmt"

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

यह इनपुट कैसे पार्स किया जाना चाहिए यह जानने के लिए तर्क के प्रकार पर प्रतिबिंब का उपयोग करता है।

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


4

सकारात्मक पूर्णांक पढ़ने के लिए यहां मेरी "फास्ट आईओ" विधि है। इसे पहले से बिटशिफ्ट्स और मेमोरी बिछाने के साथ बेहतर बनाया जा सकता है।

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
}

3

गोलंग fmt.Scan गोलंग fmt.Scanf की तुलना में सरल है (जो कि क्लैंग स्कैन की तुलना में सरल है)

यदि fmt.Scan त्रुटियां अर्थात शून्य नहीं हैं, तो लॉग इन करें और वापस लौटें

1 एकल चर पढ़ें:

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 कई चर पढ़ें:

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)

शुभकामनाएँ

उदाहरण से: http://www.sreadinf.com/?q=golang-in-1-hour


0

आप fmt.Scanfएक प्रारूप विनिर्देशक के साथ उपयोग कर सकते हैं । पूर्णांक के लिए प्रारूप निर्दिष्ट% d है। तो आप नीचे दिए गए मानक इनपुट का उपयोग कर सकते हैं।

func main() {
    var someVar int
    fmt.Scanf("%d", &someVar)
}

या फिर आप नीचे fmt.Scanया fmt.Scanlnनीचे के रूप में उपयोग कर सकते हैं ।

func main() {
   var someVar int
   fmt.Scanln(&someVar)
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.