bufio.NewReader总是创建一个新行:/

时间:2011-11-16 20:12:18

标签: go

我使用它来收集输入然后显示输入,但是当我这样做时,“某事”文本将以新行显示,但我希望文本显示在同一行中,任何想法?

func main() {
    fmt.Println("Example")
    print("example: ")
    in := bufio.NewReader(os.Stdin); 
    input, err := in.ReadString('\n');
    if err != nil {
        fmt.Println("Error: ", err)
    }

    fmt.Println(input, "something")
}

3 个答案:

答案 0 :(得分:3)

input修剪换行符。例如,

package main

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

func main() {
    fmt.Println("Example")
    print("example: ")
    in := bufio.NewReader(os.Stdin)
    input, err := in.ReadString('\n')
    if err != nil {
        fmt.Println("Error: ", err)
        return
    }
    fmt.Println(strings.TrimRight(input, "\n"), "something")
}

输入/输出:

Example
example: some input
some input something

答案 1 :(得分:2)

fmt.Println()会自动在其输出结尾添加换行符。

您可以尝试使用Printf,它采用“格式字符串”和输入列表。

一个例子是:

func main() {
  fmt.Println("Example")
  print("example: ")
  in := bufio.NewReader(os.Stdin); 
  input, err := in.ReadString('\n');
  if err != nil {
      fmt.Println("Error: ", err)
  }

  fmt.Printf("something : %s", input)
}

在这种情况下,%s是字符串类型的占位符。 所有占位符都可以在fmt godoc中找到:http://golang.org/pkg/fmt/

此外,如果输入本身在结尾处有换行符,您可以使用包Trim中的strings来拉出\ n字符。

答案 2 :(得分:0)

在Windows上(不确定是否相关)以前的答案都不适用于我。以下是我找到的解决方案:https://groups.google.com/d/msg/golang-nuts/hWoESdeZ398/qDbTogJhj88J链接到https://play.golang.org/p/_9N_RwmBvd

基本想法是,不是使用strings.TrimRight(input, "\n"),而是包含\r字符,例如strings.TrimRight(input, "\r\n")
这解决了OP问题。

固定输入剥离的OP代码!

func main() {
    fmt.Println("Example")
    print("example: ")
    in := bufio.NewReader(os.Stdin); 
    input, err := in.ReadString('\n');
    if err != nil {
        fmt.Println("Error: ", err)
    }

    fmt.Println(strings.TrimRight(input, "\r\n"), "something")
}
PS:对不起,我只是希望拯救某人浪费20分钟的谷歌搜索!