一尘不染

如何从控制台中的标准输入读取?

go

我想从命令行读取标准输入,但我的尝试以程序在提示我输入之前退出而结束。我在 C# 中寻找等效的Console.ReadLine()

这是我目前拥有的:

package main

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

func main() {
    reader := bufio.NewReader(os.Stdin)
    fmt.Print("Enter text: ")
    text, _ := reader.ReadString('\n')
    fmt.Println(text)

    fmt.Println("Enter text: ")
    text2 := ""
    fmt.Scanln(text2)
    fmt.Println(text2)

    ln := ""
    fmt.Sscanln("%v", ln)
    fmt.Println(ln)
}

阅读 149

收藏
2021-10-28

共2个答案

一尘不染

我不确定块有什么问题

reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)

因为它在我的机器上工作。但是,对于下一个块,您需要一个指向要分配输入的变量的指针。尝试替换fmt.Scanln(text2)fmt.Scanln(&text2). 不要使用Sscanln,因为它会解析内存中已有的字符串,而不是来自标准输入的字符串。如果你想做一些你想要做的事情,请将其替换为fmt.Scanf("%s", &ln)

如果这仍然不起作用,您的罪魁祸首可能是一些奇怪的系统设置或有缺陷的 IDE。

2021-10-28
一尘不染

你也可以试试:

scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

if scanner.Err() != nil {
    // Handle error.
}
2021-10-28