Sembra che si stia verificando un problema queer durante l'input dell'utente all'interno di un ciclo for in go. Ecco il mio codeCome utilizzare fmt.Scanf in 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)
}
}
Cosa succede quando si esegue questo codice è questo:
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
Quello che ho notato è che ogni iterazione del ciclo avviene due volte, questo potrebbe essere perché Go è utilizzando il parallelismo per impostazione predefinita e facendo sì che entrambi i processori eseguano il codice all'interno di un ciclo for?
Per quanto posso vedere, ogni iterazione viene eseguita una sola volta, 'Debug: i: n' dove' n' va da 0 a 9 suggerisce esattamente questo. O intendi qualcos'altro? Ecco la mia sessione nel terminale: https://gist.github.com/4357860 Funziona esattamente come previsto. –
Come mai il tuo output non corrisponde al tuo codice? – jdi
@VladimirMatveev Se provate a eseguirlo sulla vostra macchina, penso che vedrete cosa intendo. Vedi lo scanf nel loop? Dovrebbe leggere un valore dalla tastiera 10 volte. Ma per ogni input che do dentro, il blocco del ciclo viene eseguito due volte. Quindi ho incrementi due volte. – gprasant