Cara Mengendalikan Input Tidak Sah dalam fmt.Scanf Go
Bagi mereka yang menghadapi masalah dengan input tidak sah semasa menggunakan fmt.Scanf(), ia adalah penting untuk memahami sebab atur cara masuk ke dalam gelung tak terhingga apabila rentetan dimasukkan dan bukannya integer.
Dalam Go, fmt.Scanf() menghuraikan aliran input untuk penentu format tertentu (cth., "%d " untuk integer perpuluhan). Input tidak sah, seperti rentetan, menyebabkan ralat, tetapi input kekal dalam penimbal Stdin. Akibatnya, panggilan seterusnya ke fmt.Scanf() terus memproses input tidak sah yang sama, menghasilkan gelung tak terhingga.
Penyelesaian Menggunakan fmt.Scanln
Pendekatan alternatif ialah menggunakan fmt.Scanln(), yang berkelakuan berbeza. Ia membaca dan menggunakan keseluruhan baris input, termasuk sebarang aksara yang tidak sah. Ini boleh dilaksanakan seperti berikut:
<code class="go">fmt.Printf("Please enter an integer: ") // Read in an integer var i int _, err := fmt.Scanln(&i) if err != nil { fmt.Printf("Error: %s", err.Error()) // If int read fails, read as string and forget var discard string fmt.Scanln(&discard) return } fmt.Printf("Input contained %d", i)</code>
Pilihan Tambahan
Jika fmt.Scanln() tidak optimum, pilihan lain termasuk:
Atas ialah kandungan terperinci Mengapa fmt.Scanf() Menyebabkan Gelung Infinite dengan Input Tidak Sah dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!