如何在Go中使用fmt.Scanf [英] How do I use fmt.Scanf in Go

查看:488
本文介绍了如何在Go中使用fmt.Scanf的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 包main 

导入fmt

func main(){
var num int
for我:= 0;我< 10; i ++ {
fmt.Printf(Debug:i:%d,i)
fmt.Scanf(%d,& num)
fmt.Println(num)


$ / code>

当我运行这段代码时会发生什么:

 调试:i:0 
输入下一个数字
1
1
Debug:i :1
输入下一个数字
1
调试:i:2
输入下一个数字
2
2
调试:i:3
输入下一个数字
2
调试:i:4
输入下一个数字
3
3
调试:i:5
输入下一个数字
3
调试:i:6
输入下一个数字
4
4
调试:i:7
输入下一个数字
4
调试:i:8
输入下一个数字
5
5
调试:i:9
输入下一个数字
5

我注意到循环的每次迭代都会发生两次,难道这是因为Go是在默认情况下使用并行性并使两个处理器在for循环内运行代码?

解决方案

您使用的是什么操作系统? Windows?



试试这个:

  package main 

importfmt

func main(){
var num int
for i:= 0;我< 10; i ++ {
fmt.Printf(Debug:i:%d \\\
,i)
fmt.Println(输入下一个数字)
n,err:= fmt.Scanf( %d\\\
,#)
if err!= nil {
fmt.Println(n,err)
}
fmt.Println(num)


code

$ b $输出:

 调试:i:0 
输入下一个数字
1
1
调试:i:1
输入下一个数字
2
2
调试:i:2
输入下一个数字
3
3
调试:i:3
输入下一个数字
4
4
调试:i:4
输入下一个数字
5
5
调试:i:5
输入下一个数字
6
6
调试:i:6
输入下一个数字
7
7
调试:i: 7
输入下一个数字
8
8
调试:i:8
输入下一个数字
9
9
调试: i:9
输入下一个号码
10
10


I seem to be having a queer problem while getting user input within a for loop in go. Here is my code

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)
    }
}

What happens when I run this code is this :

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

What I notice is that each iteration of the loop happens twice, Could this be because Go is using parallelism by default and causing both processors to run the code within a for loop?

解决方案

What OS are you using? Windows?

Try this:

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)
    }
}

Output:

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

这篇关于如何在Go中使用fmt.Scanf的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆