3 回答
TA贡献1818条经验 获得超8个赞
您正在使用什么操作系统?视窗?
试试这个:
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)
}
}
输出:
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
TA贡献1725条经验 获得超7个赞
上面的答案是一个很好的建议。编码
if err != nil {
fmt.Println(n, err)
}
将输出此问题的原因。
10 unexpected newline
因此,我将代码更改为此,并且它可以正常工作。
package main
import "fmt"
func main() {
var num int
for i := 0; i < 10; i++ {
fmt.Printf("Debug: i : %d ", i)
fmt.Scanf("%d\n", &num) // add "\n"
fmt.Println(num)
}
}
这是因为行尾不同。Windows使用回车和换行(\r\n)作为行尾。Unix使用换行符(\n)。
您可以使用notepad2创建带有\r换行符的文件(a.txt)。并执行以下操作:
go run s.go < input.txt
这将正常工作。
TA贡献1802条经验 获得超4个赞
仅指出fmt.Scanln(#)可能与fmt.Scanf(“%d \ n”,#)相同,因为fmt.Scanln(#)也检查“ num”的类型。
换句话说,如果
var num float32 fmt.Scanln(&num)
您可以从控制台输入浮动号码。
- 3 回答
- 0 关注
- 235 浏览
添加回答
举报