Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengendalikan Input Tidak Sah dan Flush Input Standard Selepas `fmt.Scanf()` dalam Go?

Bagaimana untuk Mengendalikan Input Tidak Sah dan Flush Input Standard Selepas `fmt.Scanf()` dalam Go?

Susan Sarandon
Susan Sarandonasal
2024-10-27 07:26:28241semak imbas

How to Handle Invalid Input and Flush Standard Input After `fmt.Scanf()` in Go?

Membilas Stdin Selepas fmt.Scanf() dalam Go

Isu: Apabila menggunakan fmt.Scanf() untuk mendapatkan input pengguna, ia boleh menjadi mencabar untuk mengendalikan input tidak sah dengan berkesan. Jika pengguna memasukkan aksara bukan angka, gelung akan terus berulang, mewujudkan pengalaman yang tidak diingini.

Penyelesaian:

Untuk menyelesaikan isu ini, adalah penting untuk mengepam stdin (input standard) selepas setiap permintaan input. Dengan berbuat demikian, mana-mana aksara tidak sah yang tinggal dalam penimbal input dibuang, memastikan permintaan input seterusnya bermula dengan senarai yang bersih.

Penyelesaian Menggunakan fmt.Scanln:

Fungsi fmt.Scanln boleh digunakan untuk membaca rentetan daripada stdin dan mengendalikan aksara baris baharu secara automatik. Dengan menggunakan fmt.Scanln, gelung boleh dipermudahkan tanpa memerlukan pembilasan eksplisit stdin:

<code class="go">package main

import (
    "fmt"
)

func main() {
    fmt.Println("Please enter an integer: ")

    // Read in an integer
    var userI int
    _, err := fmt.Scanln(&userI)
    if err != nil {
        fmt.Printf("Error: %s", err.Error())
        return
    }
    fmt.Println(userI)
}</code>

Penyelesaian Alternatif:

Jika tiada terbina dalam fungsi flushing stdin, penyelesaian alternatif boleh digunakan:

  • Menggunakan io.Discard: Nilai io.Discard boleh dihantar ke fmt.Scanf() untuk membuang input tidak sah.
  • Menggabungkan fmt.Scanf() dan bufio: Dengan menggabungkan fmt.Scanf() dengan pakej bufio, fungsi ReadString() boleh dimanfaatkan untuk membaca keseluruhan baris input, buang tidak sah aksara, dan teruskan gelung.

Kesimpulan:

Walaupun tiada fungsi pembilasan stdin terbina dalam dalam Go, teknik seperti menggunakan fmt.Scanln atau penyelesaian alternatif boleh mengendalikan input tidak sah dengan berkesan dan mengekalkan gelung mesra pengguna.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Input Tidak Sah dan Flush Input Standard Selepas `fmt.Scanf()` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn