为了账号安全,请及时绑定邮箱和手机立即绑定

正确读取用户的输入

正确读取用户的输入

Go
慕姐4208626 2022-06-21 09:50:50
我对 Golang 非常陌生,我正在尝试从用户读取输入,这是要以编程方式打开的文件的名称。我最初尝试过这个:package mainimport (    "fmt"    "os"    "log"    "io/ioutil")func takeInput() {    r, _ := os.Getwd()    fmt.Println("Your working dir:", r)    fmt.Print("Enter a file: ")    f, err := bufio.NewReader(os.Stdin).ReadString('\n')    if err != nil {        log.Fatal(err)    }    s, err := ioutil.ReadFile(string(f))    if err != nil {        log.Fatal(err)    }    fmt.Println(string(s))}func main() {    takeInput()}但不知何故,它总是导致:$ go run getin.goYour working dir: /media/DATA/SrcEnter a file: data.txt2020/07/23 22:21:03 open data.txt: no such file or directoryexit status 1我data.txt在当前工作目录中有该文件。我用谷歌搜索了一下,发现我也可以fmt.Scanln用来接受用户输入,效果很好:func takeInput() {    r, _ := os.Getwd()    fmt.Println("Your working dir:", r)    var f string    fmt.Print("Enter a file: ")    fmt.Scanln(&f)  // what I changed is how input is taken    s, err := ioutil.ReadFile(string(f))    if err != nil {        log.Fatal(err)    }    fmt.Println(string(s))}$ go run getin.goYour working dir: /media/DATA/SrcEnter a file: data.txt100,200,300,445...有人可以帮我理解使用bufio.NewReader获取用户输入的问题吗?
查看完整描述

1 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

根据 ReadString 的文档:


ReadString 读取直到输入中第一次出现 delim,返回一个字符串,其中包含直到并包括分隔符的数据。


所以第一种方法的问题是文件名末尾包含换行符。使用Scanln,它会读取直到看到换行符,但它不包括输出中的换行符。


因此,在获取用户输入后,您可以通过更新代码轻松修剪空格:


func takeInput() {

    r, _ := os.Getwd()

    fmt.Println("Your working dir:", r)

    fmt.Print("Enter a file: ")

    f, err := bufio.NewReader(os.Stdin).ReadString('\n')

    if err != nil {

        log.Fatal(err)

    }

    s, err := ioutil.ReadFile(strings.TrimSpace(f)))  // what needs to be changed

    if err != nil {

        log.Fatal(err)

    }

    fmt.Println(string(s))

}

也不要忘记导入strings包。


查看完整回答
反对 回复 2022-06-21
  • 1 回答
  • 0 关注
  • 74 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信