我想从命令行读取输入,但是在我被提示输入之前,我的尝试已经结束,程序退出.我在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)
}
Run Code Online (Sandbox Code Playgroud)
Lin*_*ope 267
我不确定该块有什么问题
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)
Run Code Online (Sandbox Code Playgroud)
因为它适用于我的机器.但是,对于下一个块,您需要一个指向您要为其分配输入的变量的指针.尝试更换fmt.Scanln(text2)用fmt.Scanln(&text2).不要使用Sscanln,因为它解析已经在内存中的字符串而不是stdin.如果您想要做类似于您尝试的操作,请将其替换为fmt.Scanf("%s", &ln)
如果这仍然不起作用,你的罪魁祸首可能是一些奇怪的系统设置或一个错误的IDE.
Hel*_*ang 116
你也可以尝试:
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if scanner.Err() != nil {
// handle error.
}
Run Code Online (Sandbox Code Playgroud)
Pit*_*ith 86
我认为更为标准的做法是:
package main
import "fmt"
func main() {
fmt.Print("Enter text: ")
var input string
fmt.Scanln(&input)
fmt.Print(input)
}
Run Code Online (Sandbox Code Playgroud)
看看scangodoc:http://godoc.org/fmt#Scan
扫描扫描从标准输入读取的文本,将连续的空格分隔值存储到连续的参数中.换行计为空格.
Scanln类似于Scan,但是在换行符处停止扫描,在最终项目之后必须有换行符或EOF.
Nar*_*ula 19
始终尝试使用bufio.NewScanner从控制台收集输入.正如其他人所提到的,有多种方法可以完成这项工作,但Scanner最初是为了完成这项工作.Dave Cheney解释了为什么你应该使用Scanner而不是bufio.Reader的ReadLine.
https://twitter.com/davecheney/status/604837853344989184?lang=en
以下是您的问题的代码段解答
package main
import (
"bufio"
"fmt"
"os"
)
/*
Three ways of taking input
1. fmt.Scanln(&input)
2. reader.ReadString()
3. scanner.Scan()
Here we recommend using bufio.NewScanner
*/
func main() {
// To create dynamic array
arr := make([]string, 0)
scanner := bufio.NewScanner(os.Stdin)
for {
fmt.Print("Enter Text: ")
// Scans a line from Stdin(Console)
scanner.Scan()
// Holds the string that scanned
text := scanner.Text()
if len(text) != 0 {
fmt.Println(text)
arr = append(arr, text)
} else {
break
}
}
// Use collected inputs
fmt.Println(arr)
}
Run Code Online (Sandbox Code Playgroud)
如果您不想以编程方式收集输入,只需添加这些行
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
text := scanner.Text()
fmt.Println(text)
Run Code Online (Sandbox Code Playgroud)
上述程序的输出将是:
Enter Text: Bob
Bob
Enter Text: Alice
Alice
Enter Text:
[Bob Alice]
Run Code Online (Sandbox Code Playgroud)
上面的程序收集用户输入并将它们保存到数组中.我们也可以用特殊的角色打破这种流动.Scanner为高级用法提供API,例如使用自定义函数进行拆分等,扫描不同类型的I/O流(Stdin,String)等.
Chi*_*xus 10
在循环中读取多个输入的另一种方法是可以处理带空格的输入:
package main
import (
"fmt"
"bufio"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
var text string
for text != "q" { // break the loop if text == "q"
fmt.Print("Enter your text: ")
scanner.Scan()
text = scanner.Text()
if text != "q" {
fmt.Println("Your text was: ", text)
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
Enter your text: Hello world!
Your text was: Hello world!
Enter your text: Go is awesome!
Your text was: Go is awesome!
Enter your text: q
Run Code Online (Sandbox Code Playgroud)
我参加聚会迟到了。但是一个班轮怎么样:
data, err := ioutil.ReadAll(os.Stdin)
Run Code Online (Sandbox Code Playgroud)
完成后按 ctrl+d 。
也可以这样做:
package main
import "fmt"
func main(){
var myname string
fmt.Scanf("%s", &myname)
fmt.Println("Hello", myname)
}
Run Code Online (Sandbox Code Playgroud)
干净地读入几个提示值:
// Create a single reader which can be called multiple times
reader := bufio.NewReader(os.Stdin)
// Prompt and read
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Print("Enter More text: ")
text2, _ := reader.ReadString('\n')
// Trim whitespace and print
fmt.Printf("Text1: \"%s\", Text2: \"%s\"\n",
strings.TrimSpace(text), strings.TrimSpace(text2))
Run Code Online (Sandbox Code Playgroud)
这是一个运行:
Enter text: Jim
Enter More text: Susie
Text1: "Jim", Text2: "Susie"
Run Code Online (Sandbox Code Playgroud)
小智 5
试试这个代码:
var input string
func main() {
fmt.Print("Enter Your Name=")
fmt.Scanf("%s", &input)
fmt.Println("Hello " + input)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
245207 次 |
| 最近记录: |