How to read from standard input in the console?
I'm not sure what's wrong with the block
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter text: ")
text, _ := reader.ReadString('\n')
fmt.Println(text)
As it works on my machine. However, for the next block you need a pointer to the variables you're assigning the input to. Try replacing fmt.Scanln(text2)
with fmt.Scanln(&text2)
. Don't use Sscanln
, because it parses a string already in memory instead of from stdin. If you want to do something like what you were trying to do, replace it with fmt.Scanf("%s", &ln)
If this still doesn't work, your culprit might be some weird system settings or a buggy IDE.
you can as well try:
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if scanner.Err() != nil {
// handle error.
}
I think a more standard way to do this would be:
package main
import "fmt"
func main() {
fmt.Print("Enter text: ")
var input string
fmt.Scanln(&input)
fmt.Print(input)
}
Take a look at the scan
godoc: http://godoc.org/fmt#Scan
Scan scans text read from standard input, storing successive space-separated values into successive arguments. Newlines count as space.
Scanln is similar to Scan, but stops scanning at a newline and after the final item there must be a newline or EOF.