首页  >  文章  >  后端开发  >  如何在没有 For 循环的情况下从 Golang 中的标准输入读取多个整数?

如何在没有 For 循环的情况下从 Golang 中的标准输入读取多个整数?

Barbara Streisand
Barbara Streisand原创
2024-10-29 01:10:30470浏览

How to Read Multiple Integers from Standard Input in Golang Without a For Loop?

读取 Golang 中以空格分隔的整数

问题:

如何高效读取多个来自标准输入(stdin)的整数并将它们存储在整数切片中而不使用 Golang 中的 for 循环?例如,给定以下输入:

Enter the number of integers
3
Enter the integers
23 45 66

如何将这些值转换为整数切片?

答案:

虽然是一个循环本质上是存在的,无需使用显式的 for 或 goto 循环就可以实现这一点。操作方法如下:

<code class="go">package main

import "fmt"

func main() {
    fmt.Println(`Enter the number of integers`)
    var n int
    if m, err := Scan(&amp;n); m != 1 {
        panic(err)
    }
    fmt.Println(`Enter the integers`)
    all := make([]int, n)
    ReadN(all, 0, n)
    fmt.Println(all)
}

func ReadN(all []int, i, n int) {
    if n == 0 {
        return
    }
    if m, err := Scan(&amp;all[i]); m != 1 {
        panic(err)
    }
    ReadN(all, i+1, n-1)
}

func Scan(a *int) (int, error) {
    return fmt.Scan(a)
}</code>

输入/输出示例:

Enter the number of integers
3
Enter the integers
10 20 30
[10 20 30]

优化以加快输入扫描速度:

为了提高输入扫描速度,请将扫描功能替换为以下优化版本:

<code class="go">func Scan(a *int) (int, error) {
    var buf [10]byte
    var ret int
    for scanned, err := fmt.Scanf("%d%s", &ret, &buf); err == nil && scanned != 2; {
        fmt.Scanf("%s", &buf)
    }
    *a = ret
    return 1, err
}</code>

以上是如何在没有 For 循环的情况下从 Golang 中的标准输入读取多个整数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn