0 -6ren">
gpt4 book ai didi

go - 在我的Go代码中,为什么外部for循环运行两次

转载 作者:行者123 更新时间:2023-12-01 22:43:12 24 4
gpt4 key购买 nike

为什么此代码两次运行外部for循环?
这是我的代码:

package main

import "fmt"

func main() {
loops := 1
for loops > 0 {
fmt.Printf("\nNo of loops\n")
fmt.Scanf("%d", &loops)
for i := 0; i < loops; i++ {
fmt.Printf("%d ", i)
}
}

}
当我运行并为循环数输入1时,输出如下:
No of loops
0
No of loops
0
No of loops

最佳答案

好吧,如果您查看文档中的How to Scan
它说

Scan,Fscan,Sscan将输入中的换行符视为空格。

我已经尝试了以下代码

package main

import "fmt"

func main() {
loops := 1
for loops > 0 {
fmt.Printf("\nNo of loops\n")
temp := 1
fmt.Scanf("%d %d", &loops, &temp)
fmt.Println("Temp:", temp)
for i := 0; i < loops; i++ {
fmt.Printf("\ti: %d \n", i)
}
}

}
我创建了一个临时变量,并从os.Stdin进行了扫描(如上所述)。
循环= 1的输出为
Loop: 1
No of loops
1
Temp: 1
i: 0
Loop: 1
No of loops
因此temp取出了新行,按预期执行了外部循环。
没有温度变量,流程就像
-> loops=1 
-> outer for
-> scanf loops (as 1)
-> inner for loop
-> outer for
-> scanning will be ignored. since buffer is present in Standard Input, i.e., new line.
-> inner for loop
也就是说,我们看到两个内部循环,其中loops = 1。这不仅对于循环= 1,而且对于任何循环值都将为您提供2个内部for循环。
您可以在代码中防止上述情况,也可以使用 Scanln方法。

Scanln与Scan类似,但是在换行符处停止扫描,并且在最后一个项目之后必须有换行符或EOF。

这样的事情应该做
fmt.Scanln(&loops)

关于go - 在我的Go代码中,为什么外部for循环运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63165509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com