我是Go的新手,并且无法让fmt.scan()填充切片。输入值的数量是动态的,我不能使用for循环。我最初的想法是尝试这个:
package main
import "fmt"
func main() {
var x []int
fmt.Println("Enter input")
fmt.Scanf("%v", append(x))
fmt.Println(x)
}
这显然不起作用。有人能指出我正确的方向吗?
答案 0 :(得分:1)
[获取]
fmt.Scan()
来填充切片。输入值的数量是动态的,我不能使用for循环。
也许,这样的事情:
package main
import "fmt"
func input(x []int, err error) []int {
if err != nil {
return x
}
var d int
n, err := fmt.Scanf("%d", &d)
if n == 1 {
x = append(x, d)
}
return input(x, err)
}
func main() {
fmt.Println("Enter input:")
x := input([]int{}, nil)
fmt.Println("Input:", x)
}
输出:
Enter input:
1
2 3
4
5 6 7
Input: [1 2 3 4 5 6 7]
附录:
当为变量分配存储或创建新值并且未提供显式初始化时,变量或值的类型为the zero value,默认值为nil
,用于切片。 Conversions是T(x)
形式的表达式,其中T
是一种类型,x
是可以转换为T
类型的表达式。 []int(nil)
是切片值[]int
的零值转换。
x := input([]int(nil), nil)
相当于
x := input([]int{}, nil)
或
var x []int
x = input(x, nil)
我修改了我的使用答案:
x := input([]int{}, nil)
答案 1 :(得分:0)
使用简单的程序包和更多的逻辑,您可以尝试一下,
package main
import "fmt"
func main() {
var ele rune
var size int
var sli = make([]int,0,1)
size = cap(sli)
for i:=0; i<=size; i++{
if i>=len(sli){
size=size+1
}
ele = 0
fmt.Println("Enter a number to add: ")
fmt.Scan(&ele)
if ele==0 {
fmt.Println("Stopping!")
break
}
sli = append(sli, int(ele))
}
fmt.Println(sli)
}
当您输入除整数以外的任何代码时,代码将停止并打印切片。