Прочитать произвольное количество ввода stdin - PullRequest
0 голосов
/ 28 октября 2018

Мне нужно прочитать произвольное количество входных данных из stdin.У меня есть следующий код, который работает нормально и читает произвольное количество ввода из командной строки:

// Reads from command-line arguments
package main

import(
        "fmt"
        "os"
        "strconv"
)

func main(){
        for _,arg := range os.Args[1:] {
                n, err := strconv.Atoi(arg)
                if err != nil {
                        fmt.Fprintf(os.Stderr, "Error: %v\n", err)
                        os.Exit(1)
                }
                fmt.Printf("%d\n", n)
        }
}

Но я хочу изменить его на чтение с stdin, и я сделал следующее:

// Reads input from stdin
package main

import "fmt"

func main(){
        var a, b, c, d int
        count, err := fmt.Scan(&a, &b, &c, &d)
        fmt.Printf("Arguments Read: %d\n", count)
        fmt.Printf("%d, %d, %d, %d\n", a, b, c, d)
        if err != nil {
                fmt.Printf("%v\n", err)
        }
}

Но во второй версии кода я обязан прочитать фиксированное количество аргументов из stdin.Как я могу прочитать произвольное количество аргументов из stdin?

1 Ответ

0 голосов
/ 28 октября 2018

Вы можете зацикливать условие и продолжать читать входные данные из стандартного ввода, пока это условие не будет выполнено.В приведенном ниже примере, если input является «exit», программа заканчивает чтение и выводит все предоставленные аргументы.

inputOpen := true
var args []string

fmt.Println("Provide argument, type exit to finish")
for inputOpen {
    var arg string
    var err error

    if _, err = fmt.Scan(&arg); err != nil {
        fmt.Printf("%v\n", err)
    }


    if arg == "exit" {
        inputOpen = false
    } else {
        args = append(args, arg)
    }
}

fmt.Println(fmt.Sprintf("Arguments: %v", args))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...