1 回答
TA贡献1803条经验 获得超3个赞
好吧,如果您查看文档中的如何扫描它说
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 扫描。
loops=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
也就是说,我们看到两个内部循环 for loops=1。这不仅适用于 for loops=1,而且对于任何循环值都会为您提供 2 个内部 for 循环。
您可以在代码中如上所述防止这种情况,也可以使用Scanln方法。
Scanln 类似于 Scan,但在换行处停止扫描,并且在最后一项之后必须有换行符或 EOF。
这样的事情应该做
fmt.Scanln(&loops)
- 1 回答
- 0 关注
- 203 浏览
添加回答
举报
