避免空格作为输入

我是 golang 的新手,已经从 python 切换了。我正在尝试扫描一个数组并将其显示给用户。但是,如果有任何尾随空格,则 go 不会等待用户输入下一个 int(就像在 c++ 中发生的那样),而是使用零。


func main() {

    var k int

    fmt.Scanf("%d", &k)

    for i:= 0 ; i< k ; i++{

        arr(5)

    }

}

func arr(l int){

    arr:= make([]int, l)

    for i := 0; i < l; i++ {

        fmt.Scanf("%d",&arr[i])

    }

    fmt.Println(arr)

}

这是我的代码,所以当我输入


1_


1_2_3_4_5_ 其中下划线表示将打印出来的黑色空间


[0 1 2 3 4]


预期的结果是


[1 2 3 4 5]


我的代码有问题吗?或者这就是 Scanf() 函数的工作方式,如果是这样,我应该使用什么以便它类似于 c++ scanf() 的工作方式?我试图了解为什么我自己会发生这种情况并遇到缓冲区,但我不明白这里的图片是如何出现的。


斯蒂芬大帝
浏览 113回答 1
1回答

慕娘9325324

您的输出是忽略返回的错误的结果fmt.Scanf。使用您显示的第一次调用fmt.Scanfinside的输入arr()将返回: 0和 unexpected newline.第一个值是成功扫描的项目数。第二个是返回的错误。因为有一个错误,arr[0]没有分配任何东西并保持在默认值0. 由于您忽略了错误,因此程序将继续并从下一行开始arr[1]扫描。1根据fmt.Scanf文档,错误来自输入中的换行符需要匹配格式字符串中的换行符这一事实。要正确处理第一行,您应该具有以下内容:func main() {&nbsp; &nbsp; var k int&nbsp; &nbsp; n, err := fmt.Scanf("%d\n", &k)&nbsp; &nbsp; if err != nil {&nbsp; &nbsp; &nbsp; &nbsp; panic(err)&nbsp; &nbsp; }&nbsp; &nbsp; if n != 1 {&nbsp; &nbsp; &nbsp; &nbsp; panic("expected one input")&nbsp; &nbsp; }&nbsp; &nbsp; for i:= 0 ; i< k ; i++{&nbsp; &nbsp; &nbsp; &nbsp; arr(5)&nbsp; &nbsp; }}您同样需要处理arr().两条忠告:永远不要忽略错误阅读您使用的功能的文档
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go