如何在Go中使用fmt.Scanf

gpr*_*ant 5 parallel-processing go

在go中的for循环中获取用户输入时,我似乎遇到了一个奇怪的问题.这是我的代码

package main

import "fmt"

func main() {
    var num int
    for i := 0; i < 10; i++ {
        fmt.Printf("Debug: i : %d ", i)
        fmt.Scanf("%d", &num)
        fmt.Println(num)
    }
}
Run Code Online (Sandbox Code Playgroud)

运行此代码时会发生什么:

Debug: i : 0
Enter next number
1
1
Debug: i : 1
Enter next number
1
Debug: i : 2
Enter next number
2
2
Debug: i : 3
Enter next number
2
Debug: i : 4
Enter next number
3
3
Debug: i : 5
Enter next number
3
Debug: i : 6
Enter next number
4
4
Debug: i : 7
Enter next number
4
Debug: i : 8
Enter next number
5
5
Debug: i : 9
Enter next number
5
Run Code Online (Sandbox Code Playgroud)

我注意到循环的每次迭代都发生了两次,这可能是因为Go默认使用并行性并导致两个处理器在for循环中运行代码?

pet*_*rSO 5

你用的是什么操作系统?视窗?

试试这个:

package main

import "fmt"

func main() {
    var num int
    for i := 0; i < 10; i++ {
        fmt.Printf("Debug: i : %d\n", i)
        fmt.Println("Enter next number")
        n, err := fmt.Scanf("%d\n", &num)
        if err != nil {
            fmt.Println(n, err)
        }
        fmt.Println(num)
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Debug: i : 0
Enter next number
1
1
Debug: i : 1
Enter next number
2
2
Debug: i : 2
Enter next number
3
3
Debug: i : 3
Enter next number
4
4
Debug: i : 4
Enter next number
5
5
Debug: i : 5
Enter next number
6
6
Debug: i : 6
Enter next number
7
7
Debug: i : 7
Enter next number
8
8
Debug: i : 8
Enter next number
9
9
Debug: i : 9
Enter next number
10
10
Run Code Online (Sandbox Code Playgroud)