bufio.NewReader всегда создает новую строку: / - PullRequest
3 голосов
/ 17 ноября 2011

Я использую это, чтобы собрать вход и затем отобразить ввод, но когда я делаю это таким образом, текст «что-то» будет отображаться в новой строке, но я хочу, чтобы текст отображался в той же строке,есть идеи?

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 ]

3 голосов
/ 17 ноября 2011

Обрезать новую строку с 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
2 голосов
/ 17 ноября 2011

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характер.

0 голосов
/ 26 июня 2016

В окнах (не уверен, что это актуально) у меня не сработал ни один из предыдущих ответов. Итак, вот разрешение, которое я нашел: 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.

ОП-код с фиксированным зачисткой ввода!

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 минут на поиск в Google!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...