Code:
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter a number")
input,_ := reader.ReadString('
')
fmt.Printf("Type of the entered value is %T
",input)
fmt.Println(input)
out,_ := strconv.Atoi(input)
fmt.Printf("Type now is: %T
", out)
fmt.Printf("Value now is %d
",out)
fmt.Println(out)
Complete beginner to Golang. I was trying to solve one of the problems from r/dailyprogrammer. I took the snippet to read the input from SO, as well as the strconv.Atoi function. The examples for this function make sense but when I apply it to the input I read from stdin, it gives me 0.
If you change your code a little you'll see that strconv.Atoi(input)
is returning an error. I hope you've now learned an important lesson about how Go does error handling.
Error is: strconv.Atoi: parsing "1 ": invalid syntax
out, err := strconv.Atoi(input)
if err != nil {
fmt.Printf("Error is: %v
", err)
}
One way to fix this is by trimming input
using strings.TrimSuffix():
reader := bufio.NewReader(os.Stdin)
fmt.Print("Enter a number")
input, _ := reader.ReadString('
')
input = strings.TrimSuffix(input, "
")
fmt.Printf("Type of the entered value is %T
", input)
fmt.Println(input)
out, err := strconv.Atoi(input)
if err != nil {
fmt.Printf("Error is: %v
", err)
}
fmt.Printf("Type now is: %T
", out)
fmt.Printf("Value now is %d
", out)
fmt.Println(out)
You can also use the Scanner, which doesn't require you to remove the :
scanner := bufio.NewScanner(os.Stdin)
fmt.Print("Enter a number")
scanner.Scan()
input := scanner.Text()