go - 读取任意数量的输入标准输入
问题描述
我需要从中读取任意数量的输入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
?
解决方案
您可以循环条件并继续从标准输入读取输入,直到满足该条件。在下面的示例中,如果输入是“退出”程序完成读取并输出所有提供的参数。
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))
推荐阅读
- machine-learning - 使用 AI 查找函数的最大值
- c++ - When to assume aliasing
- java - 在 Linux 终端中编译一个 Net beans 创建的项目
- multithreading - 为什么调用 datetime 会挂起一个线程?
- c# - 在用户找到正确路径之前,向用户提出相同问题的最佳方式是什么?
- php - 从 curl_exec 获取响应代码、标头和内容
- stored-procedures - Oracle 包 - 使用临时表创建游标
- bootstrap-4 - 如何让我的表单在所有设备上都能响应
- sql - 一次实现两个 SQL 注入查询(带和不带单引号)
- arrays - 计算 Google 表格中每个类别的元素数量