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條經驗 獲得超8個贊
上面的答案是一個很好的建議。編碼
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 關注
- 257 瀏覽
添加回答
舉報