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

终端 Go 应用程序中的多行输入

终端 Go 应用程序中的多行输入

Go
德玛西亚99 2021-10-18 09:58:37
我需要让用户向控制台输入多行文本。这是我的代码:package mainimport (    "bufio"    "fmt"    "os")func main() {    for {        fmt.Println("How to read all lines here?")        in := bufio.NewReader(os.Stdin)        result, err := in.ReadString('\n')        if err != nil {            fmt.Println(err)        }        fmt.Println("\nresult")        fmt.Println(result)         }}我粘贴在控制台中:    Hello    World它输出:How to read all lines here?        Hello        WorldresultHow to read all lines here?result        HelloHow to read all lines here?result        WorldHow to read all lines here?resultHow to read all lines here?但我希望它是:         How to read all lines here?                Hello                World        result        How to read all lines here?        result                Hello                World        How to read all lines here?我想我需要使用类似的东西EOF而不是'\n' But 怎么做呢?更新peterSo 的答案有效,除非我尝试从剪贴板粘贴文本,中间有一个或多个空行,例如:HelloWorld它打印Enter Lines:HelloWorldResult:HelloEnter Lines:更新 2伟大的更新 peterSO 的答案现在甚至适用于带有空行的文本。
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

缓冲一组行并检测一组行的结尾。例如,


package main


import (

    "bufio"

    "fmt"

    "os"

)


func main() {

    scn := bufio.NewScanner(os.Stdin)

    for {

        fmt.Println("Enter Lines:")

        var lines []string

        for scn.Scan() {

            line := scn.Text()

            if len(line) == 1 {

                // Group Separator (GS ^]): ctrl-]

                if line[0] == '\x1D' {

                    break

                }

            }

            lines = append(lines, line)

        }


        if len(lines) > 0 {

            fmt.Println()

            fmt.Println("Result:")

            for _, line := range lines {

                fmt.Println(line)

            }

            fmt.Println()

        }


        if err := scn.Err(); err != nil {

            fmt.Fprintln(os.Stderr, err)

            break

        }

        if len(lines) == 0 {

            break

        }

    }

}

安慰:


输入行:

你好

世界

^]


结果:

你好

世界


输入行:

告别


世界


^]


结果:

告别


世界



输入行:

^]

要终止一组行,请在空行上输入:< ctrl+]>< Enter>。要终止输入,请输入一行:< ctrl+]>< Enter>。


查看完整回答
反对 回复 2021-10-18
  • 3 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

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