在我的Go代码中,为什么外部for循环运行两次
为什么这段代码要运行两次外部for循环 这是我的密码:在我的Go代码中,为什么外部for循环运行两次,go,Go,为什么这段代码要运行两次外部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++
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)
}
}
}
好吧,如果你看一下文档中的
上面说
Scan、Fscan、SSC可以将输入中的换行符视为空格
我已经尝试了下面的代码
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)
}
}
}
所以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
也就是说,对于循环=1,我们看到了两个内部循环。这不仅适用于循环=1,而且对于循环的任何值,都将为循环提供2个内部值
您可以在代码中如上所述防止这种情况,也可以使用方法
Scanln与Scan类似,但在换行时停止扫描,并且在最后一项之后必须有换行或EOF
像这样的事情应该可以
fmt.Scanln(&loops)
-> 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
fmt.Scanln(&loops)