我需要从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
中读取任意数量的参数?
答案 0 :(得分:0)
您可以遍历条件,并继续从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))