I’m fairly new to programing in general, and i wrote a simple program to calculate a value based on the user’s input. the goal is to have a certain calculation if its less than or equal to 12, and a different calculation if it’s greater than 12.
I managed to get this working, but there’s a problem. it doesn’t take into account if the user is typing in a character…example…if the user types “hello”, the program just closes. what i’m trying to do is simple…if the user types hello, i want the output to say “please type a valid number.” and it’ll repeat the process until a valid number is reached.
how do I go about doing this?
here’s the code i have:
package main
import (
"fmt"
"os"
"bufio"
)
func main(){
var value float64
fmt.Println("Enter the value: ")
fmt.Scanln(&value)
if value <=12{
fmt.Println(value*4.3 + 18)
} else{
fmt.Println(value*5.0 + 9.7)
}
fmt.Println("Press 'Enter' to exit program...")
bufio.NewReader(os.Stdin).ReadBytes('\n')
}
this worked, but it terminates the program. is there a way i can convert this into a for loop so that it can keep asking for user input until a number is typed?
Absolutely!!!
You can add a for with a boolean flag to exit. For example
okFlag := true
for okFlag {
…
if _, err := fmt.Scanln(&value); err != nil {
okFlag := false;
break;
}
// No Error,
That’s wrong, the flag is unnecessary and you’re breaking on error, not on success.
You may use Scanln or Scanf to specify that you want a float, e.g.:
func main() {
var value float64
fmt.Println("Enter the value: ")
for {
_, err := fmt.Scanln(&value)
//This works too.
//_, err := fmt.Scanf("%f", &value)
if err == nil {
break
}
}
if value <= 12 {
fmt.Println(value*4.3 + 18)
} else {
fmt.Println(value*5.0 + 9.7)
}
}
this almost works…i tested it out and typed 34gy4q4
the result was:
35.2
Press ‘Enter’ to exit program…
if whatever i type ends with a letter, it’ll repeat the loop, but if it ends with a number, it looks like it reads the last sequential numbers and processes that in the if statements.