登录
首页 >  Golang >  Go问答

接收不限数量的标准输入

来源:stackoverflow

时间:2024-03-09 13:54:20 363浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《接收不限数量的标准输入》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我需要从 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 读取任意数量的参数?


解决方案


您可以循环条件并继续从 stdin 读取输入,直到满足该条件为止。在下面的示例中,如果输入是“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))

理论要掌握,实操不能落!以上关于《接收不限数量的标准输入》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>