当前位置: 首页 > 面试题库 >

将os.Stdin中的数字读入Go中的数组或切片

长孙哲
2023-03-14
问题内容

我可以使用下面的多个变量读取多个数字。

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers[0], &numbers[1])

我可以使用数字本身而不是分开的形状来简化数字吗?

numbers := make([]int, 2)
fmt.Fscan(os.Stdin, &numbers) // just an example, got error

问题答案:

fmt程序包不处理扫描切片,但是您可以创建一个实用程序函数,该函数打包所有元素的地址:

func packAddrs(n []int) []interface{} {
    p := make([]interface{}, len(n))
    for i := range n {
        p[i] = &n[i]
    }
    return p
}

使用此功能,您可以像这样扫描整个切片:

numbers := make([]int, 2)
n, err := fmt.Fscan(os.Stdin, packAddrs(numbers)...)
fmt.Println(numbers, n, err)

使用以下命令进行测试fmt.Sscan()

numbers := make([]int, 5)
n, err := fmt.Sscan("1 3 5 7 9", packAddrs(numbers)...)
fmt.Println(numbers, n, err)

输出(在Go Playground上尝试):

[1 3 5 7 9] 5 <nil>


 类似资料:
  • 问题内容: 如何在我的测试中填写os.Stdin中使用扫描仪从中读取的功能? 我要求使用以下功能通过扫描仪输入用户命令行: 现在如何测试这种情况并模拟用户输入?以下示例不起作用。Stdin还是空的。 问题答案: 嘲笑 您在正确的位置上,该变量是您可以修改的(类型为),可以在测试中为其分配新值。 最简单的方法是使用您要模拟的内容作为输入创建一个临时文件。要创建临时文件,请使用。然后将内容写入其中,并

  • 问题内容: 这似乎是这将是整个interwebs一个相当普遍的事情,丰富的实例,但我似乎无法找到如何将一个转换的例子来。 我有一个从外部lib调用的函数,该函数返回一个数组 然后,我需要将该结果传递给其他函数以进行进一步处理。 不幸的是,如果我尝试致电 我懂了 在做 好多了。我该怎么做,尤其是在不创建数据副本的情况下(当我正在做的事情是传递数据时,似乎很愚蠢地复制该数据)。 问题答案: 这应该工作

  • 问题内容: 我正在尝试使用文件“ Tall.txt”将其中包含的整数写入名为“ tall”的数组中。它在某种程度上做到了这一点,但是当我运行它时,它会引发以下异常(: 为什么要完全做到这一点,以及如何将其删除?如我所见,我将文件读取为字符串,然后将其转换为int,这是非法的。 问题答案: 您可能想做这样的事情(如果您使用的是Java 5及更高版本)

  • 试图找出0长度数组和切片在Golang中的行为。提出了两段代码(我在某处找到了代码,并对其进行了一些修改以处理此问题) https://play.golang.org/p/ew2YYgvpGC https://play.golang.org/p/jm2p6L6WCG 我从网站上了解到nil数组([]int(nil))的指针值为nil,所以我决定测试一下。果然,就是这样。我只是对制作和切片数组感到困

  • 问题内容: 假设我有以下长度为3的整数数组: 然后我只抓了前两个项目 在这两种情况下,调用numSlice和nums都会产生3,分别产生2和3。 如果我随后附加到该slice(),则基础数组()现在为。两者的值均保持为3,因为切片的基础数组相同,并且切片的len现在为3。 但是,如果我再次追加到该片(),则该片的基础数组必须更改- 我们看到的情况是,现在numSlice增加了一倍,而len现在是4

  • 我是一个CPLEX用户,我需要将CSV文件中的数组数据转换为C++2D映射作为优化问题的输入。数据以列的形式显示。也就是说,如果我们考虑3行(AA1、AA2、AA3)和3列(BB1、BB2、BB3)及其各自的值,它们在CSV文件中的格式如下: 行、COL、值 AA1,BB1,0.3 AA2,BB1,0.5 AA1,BB2,0.6 AA1,BB3,0.7 AA2,BB2,0.9 AA3,BB2,0.