Go - manejo de error

 
Vista:
sin imagen de perfil
Val: 16
Ha mantenido su posición en Go (en relación al último mes)
Gráfica de Go

manejo de error

Publicado por tincopasan (4 intervenciones) el 25/04/2020 01:29:19
hola:
acá vamos con otra duda, seguro que tonta, pero todavía me cuesta un poco la lógica de este lenguaje.
Si tengo este código por ejemplo:
1
2
3
4
5
6
7
entrada, err := adivinado.ReadString('\n')
entrada = strings.TrimSpace(entrada)
numero, err := strconv.Atoi(entrada)
if err != nil {
    fmt.Println("Debe ingresar números")
    return
	}

al producirse el error de conversión a entero termino el programa, mi duda es:
¿como puedo hacer para repetir la entrada hasta que se ingrese el valor correcto? o sea que si se ingresa "a" vuelva a pedir el ingreso de un número.
Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 19
Ha mantenido su posición en Go (en relación al último mes)
Gráfica de Go

manejo de error

Publicado por kip (4 intervenciones) el 28/04/2020 03:49:37
Hola, puedes usar un simple loop:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main
 
import (
	"fmt"
	"bufio"
    "strconv"
    "os"
)
 
func main() {
	scanner := bufio.NewScanner(os.Stdin)
 
	var num int
 
	for {
        var err error
 
		fmt.Print("Enter a number: ")
		scanner.Scan()
		txt := scanner.Text()
 
        num, err = strconv.Atoi(txt)
 
        if err == nil {
            break
        }
 
        fmt.Printf("%q isn't a valid number\n", txt)
	}
 
    fmt.Printf("%d was entered\n", num)
}

Tambien es posible usar recursion:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main
 
import (
	"fmt"
	"bufio"
    "strconv"
    "os"
)
 
func getIntFromStdin() int {
	scanner := bufio.NewScanner(os.Stdin)
 
    fmt.Print("Enter a number: ")
    scanner.Scan()
    txt := scanner.Text()
 
    num, err := strconv.Atoi(txt)
 
    if err != nil {
        fmt.Printf("%q isn't a valid number\n", txt)
 
        return getIntFromStdin()
    }
 
    return num
}
 
func main() {
    num := getIntFromStdin()
 
    fmt.Printf("%d was entered\n", num)
}

Recuerda que en go solo tienes un constructor de loops, en este caso es for.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 16
Ha mantenido su posición en Go (en relación al último mes)
Gráfica de Go

manejo de error

Publicado por tincopasan (4 intervenciones) el 28/04/2020 04:01:20
hola:
gracias, ya lo había resuelto con el loop, ahora aprovecho tu código para ver el tema de la recursión. No entiendo el porque eliminaron el while, que muchos lenguajes usan. Todavía algunas estructuras de código me parecen raras.
Gracias nuevamente.
Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar