Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan kaedah imbasan untuk melaksanakan input konsol

Cara menggunakan kaedah imbasan untuk melaksanakan input konsol

PHPz
PHPzasal
2023-04-11 09:13:34868semak imbas

Dalam bahasa Go, anda boleh menggunakan kaedah scan untuk membaca data daripada input standard. Kaedah scan boleh membaca sebarang jenis data, termasuk rentetan, nombor, nilai Boolean, dsb. Artikel ini akan memperkenalkan secara terperinci cara menggunakan kaedah scan untuk melaksanakan input konsol.

Sintaks asas

scanSintaks asas kaedah adalah seperti berikut:

func Scan(a ...interface{}) (n int, err error)

Baca data daripada input dan simpannya ke dalam parameter yang ditentukan. Parameter a mewakili data yang perlu dibaca Sebarang bilangan parameter boleh dihantar. Setiap parameter ialah jenis penunjuk yang digunakan untuk menyimpan data input. Nilai pulangan n menunjukkan bilangan parameter yang berjaya dibaca dan nilai pulangan err menunjukkan kemungkinan ralat.

Berikut ialah contoh mudah yang menunjukkan cara membaca dua integer daripada konsol:

func main() {
    var a, b int
    fmt.Print("请输入两个整数:")
    n, err := fmt.Scan(&a, &b)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []int{a, b})
}

Melalui kod di atas, kita boleh melihat penggunaan asas kaedah Scan. Melaksanakan kod di atas, atur cara akan menggesa pengguna memasukkan dua integer Selepas input pengguna selesai, atur cara akan menyimpan dua integer ke dalam pembolehubah a dan b dan mengeluarkan dua integer. Kaedah

Ciri-ciri imbasan

Scan mempunyai ciri-ciri berikut:

1 Abaikan kaedah

Scan semasa membaca data , jarak antara. data akan diabaikan secara automatik. Seperti yang ditunjukkan dalam kod berikut:

func main() {
    var a, b, c string
    fmt.Print("请输入三个字符串:")
    n, err := fmt.Scan(&a, &b, &c)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []string{a, b, c})
}

Masukkan rentetan hello world go, program secara automatik akan mengabaikan ruang antara rentetan dan mengeluarkan tiga rentetan ini.

2. Menunggu pemulangan pengangkutan

Scan kaedah akan menunggu pengguna memasukkan aksara pemulangan pengangkutan n apabila membaca data, menunjukkan bahawa input telah selesai. Jika pengguna tidak memasukkan aksara carriage return, program akan menunggu input pengguna. Seperti yang ditunjukkan dalam kod berikut:

func main() {
    var s string
    fmt.Print("请输入一个字符串:")
    n, err := fmt.Scan(&s)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}

Selepas memasukkan rentetan hello, atur cara tidak akan mengeluarkan hasil serta-merta, tetapi menunggu pengguna memasukkan aksara carriage return n sebelum mengeluarkan hasil.

3. Aksara baris baharu

Scan tidak akan dibaca apabila membaca data aksara baris baharu n dalam input tidak akan dibaca. Contohnya, apabila kita membaca rentetan melalui kaedah Scan, aksara baris baharu n dalam rentetan input tidak akan dibaca. Seperti yang ditunjukkan dalam kod berikut:

func main() {
    var s string
    fmt.Print("请输入一个字符串:")
    n, err := fmt.Scan(&s)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, s)
}

Rentetan input hellonworld, atur cara hanya akan membaca rentetan hello dan tidak akan membaca aksara baris baharu n dalam rentetan.

Analisis mendalam Pelaksanaan kaedah

Scan adalah berdasarkan fungsi fmt pakej Scanf. Kaedah Scanf mempunyai ciri berikut:

1 Input berformat Kaedah

Scanf menyokong input berformat. Anda boleh menentukan jenis data untuk dibaca melalui rentetan format. Sebagai contoh, kita boleh membaca integer dan rentetan melalui rentetan format berikut:

func main() {
    var a int
    var b string
    fmt.Print("请输入一个整数和一个字符串:")
    n, err := fmt.Scanf("%d %s", &a, &b)
    if err != nil {
        fmt.Println(err)
        return
    }
    fmt.Printf("成功读取了 %d 个参数:%v\n", n, []interface{}{a, b})
}

Dalam kod di atas, rentetan format yang ditentukan "%d %s" bermaksud membaca integer dahulu, dan kemudian Baca rentetan dipisahkan oleh ruang.

2. Kaedah pemisah tersuai

Scanf menyokong pemisah tersuai. Secara lalai, kaedah Scanf menggunakan ruang sebagai pembatas. Pembatas boleh disesuaikan melalui parameter Scanf kaedah ScanState. Seperti yang ditunjukkan dalam kod berikut:

func main() {
    var a, b string
    fmt.Print("请输入两个字符串,用逗号分隔:")
    s := bufio.NewScanner(os.Stdin)
    s.Split(func(data []byte, atEOF bool) (adv int, token []byte, err error) {
        for i := 0; i < len(data); i++ {
            if data[i] == ',' {
                return i + 1, data[:i], nil
            }
        }
        return 0, data, bufio.ErrFinalToken
    })
    if s.Scan() {
        a = s.Text()
    }
    if s.Scan() {
        b = s.Text()
    }
    fmt.Printf("您输入的字符串是:%v\n", []string{a, b})
}

Dalam kod di atas, kami mencipta objek bufio melalui kaedah NewScanner pakej Scanner dan menyesuaikan pemisah melalui Split kaedah . Dalam fungsi pembatas, kami menggunakan koma sebagai pembatas untuk menghuraikan rentetan input dan menyimpannya ke dalam pembolehubah a dan b.

Ringkasan

Melalui pengenalan artikel ini, kami telah mempelajari tentang sintaks asas dan ciri kaedah Scan dan cara melaksanakan input konsol. Perlu diingat bahawa kaedah Scan tidak membaca aksara baris baharu n ke dalam input semasa memproses input. Selain itu, kaedah Scanf menyokong pembatas tersuai dan input berformat, yang boleh mengendalikan input konsol dengan lebih fleksibel.

Atas ialah kandungan terperinci Cara menggunakan kaedah imbasan untuk melaksanakan input konsol. 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