Чтение целого числа из стандартного ввода

Как использовать функцию fmt.Scanf в Go для получения целочисленного ввода из стандартного ввода?

Если это невозможно сделать с помощью fmt.Scanf, как лучше всего прочитать одно целое число?

70 голосов | спросил yasith 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 20 Sep 2010 16:22:27 +0400 2010, 16:22:27

5 ответов


0

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

Все включенные библиотеки в Go хорошо документированы.

Как говорится, я верю

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

делает трюк

ответил cthom06 20 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowMon, 20 Sep 2010 16:27:25 +0400 2010, 16:27:25
0

Альтернативой, которая может быть немного более краткой, является просто использование 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

ответил iainmcgin 17 MarpmThu, 17 Mar 2011 13:45:57 +03002011-03-17T13:45:57+03:0001 2011, 13:45:57
0

Вот мой метод "Fast IO" для чтения натуральных чисел. Это можно улучшить с помощью битовых сдвигов и предварительного размещения памяти.

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
}
ответил robert king 6 AMpSun, 06 Apr 2014 02:30:28 +040030Sunday 2014, 02:30:28
0

Golang fmt.Scan проще, чем Golang fmt.Scanf (что проще, чем Clang 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.sortedinf.com/?q = golang-в-1-часовой

ответил Manohar Reddy Poreddy 13 SunEurope/Moscow2015-12-13T02:23:28+03:00Europe/Moscow12bEurope/MoscowSun, 13 Dec 2015 02:23:28 +0300 2015, 02:23:28
0
 func main(){
  in:=bufio.NewScanner(os.Stdin)
  in.Scan()
  int,_:=strconv.Atoi(in.Text())
  fmt.Println(int)
}
ответил renjeesh n 17 +03002018-10-17T22:07:53+03:00312018bEurope/MoscowWed, 17 Oct 2018 22:07:53 +0300 2018, 22:07:53

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132