登录
首页 >  Golang >  Go问答

编写一个独立函数,实现扫描仪的工作方法

来源:stackoverflow

时间:2024-02-11 17:27:24 294浏览 收藏

目前golang学习网上已经有很多关于Golang的文章了,自己在初次阅读这些文章中,也见识到了很多学习思路;那么本文《编写一个独立函数,实现扫描仪的工作方法》,也希望能帮助到大家,如果阅读完后真的对你学习Golang有帮助,欢迎动动手指,评论留言并分享~

问题内容

在这段代码中,我创建了一个函数 takeinput() ,它将接受用户输入,包括空格。但每当我运行此代码并输入姓名和学校名称时,它都会为我打印数据。

尽管如果我编写没有任何函数的 scanner,它会获取带有空格的数据。

package main

import (
    "bufio"
    "fmt"
    "os"
)

func TakeInput(value string) {
    scanner := bufio.NewScanner(os.Stdin)
    if scanner.Scan() {
        value = scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        fmt.Println("Error encountered:", err)
    }
}

func main() {
    var name, school string
    fmt.Printf("Enter your name: ")
    TakeInput(name)

    fmt.Printf("Enter your school name: ")
    TakeInput(school)

    fmt.Println(name, school)
}

正确答案


每个参数都是函数内的本地副本。您必须传递一个指向 takeinput() 的指针(例如 &name&school)并修改指向的值(例如 *value = scanner.text(),否则您只修改在函数返回时被丢弃的副本。

例如:

func takeinput(value *string) {
    scanner := bufio.newscanner(os.stdin)
    if scanner.scan() {
        *value = scanner.text()
    }

    if err := scanner.err(); err != nil {
        fmt.println("error encountered:", err)
    }
}

func main() {
    var name, school string
    fmt.printf("enter your name: ")
    takeinput(&name)

    fmt.printf("enter your school name: ")
    takeinput(&school)

    fmt.println(name, school)
}

另请注意,bufio.Scanner 有一个内部缓冲区。它可能读取的内容比返回的内容多,当您在另一个 takeinput() 调用中创建新的 bufio.scanner 时,它可能无法读取以前读取、缓冲和丢弃的数据。

因此,在 takeinput() 之外创建扫描仪,例如

func TakeInput(scanner *bufio.Scanner, value *string) {
    if scanner.Scan() {
        *value = scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        fmt.Println("Error encountered:", err)
    }
}

func main() {
    scanner := bufio.NewScanner(os.Stdin)

    var name, school string
    fmt.Printf("Enter your name: ")
    TakeInput(scanner, &name)

    fmt.Printf("Enter your school name: ")
    TakeInput(scanner, &school)

    fmt.Println(name, school)
}

查看相关/类似问题:

My object is not updated even if I use the pointer to a type to update it

Remove an element of a slice in a struct

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>