Your fmt.Scanf("%d", &i)
call only parses an integer from the input, it does not consume input until the end of line.
If you input 3.ls
, then 3
is parsed as the decimal number, and .
is consumed and will stop the scanning. Your app ends here, so the rest (ls
and the newline) will be executed by your shell.
Use bufio.Scanner
to read lines, e.g.:
fmt.Print("input string: ")
scanner := bufio.NewScanner(os.Stdin)
if !scanner.Scan() {
return // no input
}
var i int
fmt.Sscanf(scanner.Text(), "%d", &i)
fmt.Println("Entered:", i)
See related: Tell me what’s wrong with this code GOLANG
2
solved fmt.Scanf does not consume all the characters through the end of the string