স্ট্যান্ডার্ড ইনপুট থেকে পূর্ণসংখ্যা পড়া


86

আমি কীভাবে এটি ব্যবহার করব fmt.Scanfস্ট্যান্ডার্ড ইনপুট থেকে কোনও পূর্ণসংখ্যার ইনপুট পেতে ফাংশনটি ?

যদি এটি ব্যবহার করে না করা যায় fmt.Scanf, তবে একটি একক পূর্ণসংখ্যা পড়ার সবচেয়ে ভাল উপায় কী?

উত্তর:


133

http://golang.org/pkg/fmt/# স্ক্যানফ

গোতে অন্তর্ভুক্ত সমস্ত লাইব্রেরি ভাল ডকুমেন্টেড রয়েছে।

বলা হচ্ছে, আমি বিশ্বাস করি

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

কৌতুক করে


fmt.Scanf 1 মিলিয়ন পূর্ণসংখ্যার স্ক্যান করতে প্রায় এক মিনিট সময় নিয়েছিল।
রবার্ট রাজা

@ রবার্টকিং এর পরিবর্তে বুফিও ব্যবহার করার চেষ্টা করুন এটি একটি সাধারণ উদাহরণ।
cthom06

4
কেন আপনি প্রবেশ করতে হবে &iএবং কেবল iযেমন প্রবেশ করবেন না তা আপনি ব্যাখ্যা করতে পারেন fmt.Printf("%v", i)?
জিনেল

6
@ জেইনাল কারণ গোতে মানগুলি প্যারামিটারগুলি পাস করে। iকেবলমাত্র পূর্ণসংখ্যার মান i, &iএটিই একটি পয়েন্টার i
cthom06

@ cthom06 আপনি বুফিও দিয়ে স্ক্যান করার জন্য কী ব্যবহার করছেন? ত্রুটি ... মানে আপনি যদি স্ক্যানার ব্যবহার করে থাকেন তবে স্টিডিন স্ক্যান করার জন্য আপনি কোন ইন্টারফেসটি স্ক্যানারে প্রবেশ করছিলেন? এনভিএম, দেখে মনে হচ্ছে গোলংয়ের একটি উদাহরণ রয়েছেscanner := bufio.NewScanner(os.Stdin)
গ্রেগ

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/# স্ক্যান


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

গোলং এফএমটি.স্ক্যান গোলং এফএমটি.স্কানফের চেয়ে সহজ (যা ক্ল্যাং স্ক্যানফের চেয়ে সহজ)

যদি এফএমটি.স্ক্যান ত্রুটিগুলি যেমন শূন্য না হয় তবে লগ করুন এবং ফিরে আসুন

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.sortinf.com/?q=golang-in-1- ঘন্টা


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)
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.