Tôi dường như đang gặp sự cố xếp hàng trong khi nhận được thông tin nhập của người dùng trong vòng lặp for in go. Đây là tôi codeLàm cách nào để sử dụng fmt.Scanf trong Go
package main
import "fmt"
func main() {
var num int
for i := 0; i < 10; i++ {
fmt.Printf("Debug: i : %d ", i)
fmt.Scanf("%d", &num)
fmt.Println(num)
}
}
gì xảy ra khi tôi chạy mã này này là:
Debug: i : 0
Enter next number
1
1
Debug: i : 1
Enter next number
1
Debug: i : 2
Enter next number
2
2
Debug: i : 3
Enter next number
2
Debug: i : 4
Enter next number
3
3
Debug: i : 5
Enter next number
3
Debug: i : 6
Enter next number
4
4
Debug: i : 7
Enter next number
4
Debug: i : 8
Enter next number
5
5
Debug: i : 9
Enter next number
5
Những gì tôi nhận thấy là mỗi lần lặp của vòng lặp xảy ra hai lần, điều này có thể là do Go là sử dụng song song theo mặc định và khiến cả hai bộ xử lý chạy mã trong vòng lặp for?
Theo như tôi thấy, mỗi lần lặp được thực hiện chỉ một lần, 'Debug: i: n' trong đó' n' đi từ 0 đến 9 cho thấy chính xác điều đó. Hay bạn ám chỉ điều gì khác? Đây là phiên của tôi trong terminal: https://gist.github.com/4357860 Nó hoạt động chính xác như mong đợi. –
Làm thế nào để đầu ra của bạn không khớp với mã của bạn? – jdi
@VladimirMatveev Nếu bạn cố gắng chạy nó trên máy tính của bạn, tôi nghĩ rằng bạn sẽ thấy những gì tôi có ý nghĩa. Bạn có thấy scanf trong vòng lặp không? Nó nên đọc một giá trị từ bàn phím 10 lần. Nhưng đối với mọi đầu vào tôi đưa vào, khối lặp thực hiện hai lần. Vì vậy, tôi tăng gấp đôi. – gprasant