es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo aceptar dos matrices 2D, multiplicarlas y mostrar la respuesta en el formato adecuado?

He escrito un programa para aceptar y imprimir, pero estoy obteniendo errores al aceptar matrices bidimensionales.

error:-
hilo ‘main’ se bloquea en ‘se llamó a Result::unwrap () en un valor Err: ParseIntError { kind: InvalidDigit }’, test1.rs:15:39
nota: ejecutar con la variable de entorno RUST_BACKTRACE = 1 para mostrar una traza de retorno

use std::io;

fn main() {
    let width = 3;
    let height = 3;

    let mut array = vec![vec![0; width]; height];
    let mut input_text = String::new();
    for i in 0..width {
        for j in 0..height {
            io::stdin()
                .read_line(&mut input_text)
                .expect("Error al leer desde stdin");
            let trimmed = input_text.trim();
            let t: u32 = trimmed.parse().unwrap(); //error
            array[i][j] = t;
            println!("{:?}", array);
        }
    }

    println!("{:?}", array);
}
OUTPUT :-
1

[[1, 0, 0], [0, 0, 0], [0, 0, 0]]

2

hilo 'main' se bloquea en 'se llamó a `Result::unwrap ()` en un valor `Err`: ParseIntError { kind: InvalidDigit }', test1.rs:15:39
nota: ejecutar con la variable de entorno `RUST_BACKTRACE = 1` para mostrar una traza de retorno
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error indica que hay un error InvalidDigit al analizar la entrada del usuario como un u32. Esto significa que el programa está intentando analizar una cadena que contiene un carácter que no es un dígito como un entero. Para solucionar este problema, debes asegurarte de que la entrada contenga solo dígitos antes de analizarla. Puedes hacer esto verificando los caracteres de la cadena de entrada con los dígitos válidos antes de analizarla. Aquí tienes un fragmento de código actualizado que debería funcionar:

    use std::io;
    
    fn main() {
        let width = 3;
        let height = 3;
    
        let mut array = vec![vec![0; width]; height];
        for i in 0..width {
            for j in 0..height {
                let mut input_text = String::new(); // Movimos la declaración aquí para obtener una nueva entrada en cada iteración
                io::stdin()
                    .read_line(&mut input_text)
                    .expect("fallo al leer desde stdin");
                let trimmed = input_text.trim();
    
                // comprobamos si la entrada solo contiene dígitos antes de analizarla
                let t: u32 = trimmed
                    .chars()
                    .filter(|c| c.is_digit(10))
                    .collect::<string>()
                    .parse()
                    .unwrap(); // ahora unwrap debería ser seguro
    
                array[i][j] = t;
                println!("{:?}", array);
            }
        }
    
        println!("{:?}", array);
    }
    

    En el código actualizado, verificamos cada carácter en la cadena de entrada usando el método is_digit para verificar si es un dígito. Luego recolectamos todos los dígitos válidos en una nueva cadena antes de analizarla como un entero. Esto debería evitar cualquier posible error de dígito no válido. Además, movimos la declaración de input_text dentro del bucle para asegurarnos de obtener una nueva entrada en cada iteración.

Comments are closed.