Nyx con Ejemplos

Entrada por Stdin

Leer desde la entrada estándar en Nyx se hace con read_line(), que bloquea hasta que el usuario presiona Enter y devuelve el texto ingresado como un String. Una función complementaria, print_no_newline, te permite mostrar un prompt sin avanzar a la siguiente línea, manteniendo el cursor justo después de los dos puntos.

Código

// Leer una línea de stdin con read_line() y saludar al usuario
// En CI/testing: redirigir stdin con echo "Alice" | ./programa

fn main() -> int {
    print_no_newline("Ingresa tu nombre: ")

    // read_line() lee hasta '\n' desde stdin
    let nombre: String = read_line()

    // Eliminar posible '\n' al final con trim
    let nombre_limpio: String = nombre.trim()

    if nombre_limpio.length() == 0 {
        print("Hola, desconocido!")
    } else {
        print("Hola, " + nombre_limpio + "! Bienvenido a Nyx.")
    }

    print("Longitud del nombre: " + int_to_string(nombre_limpio.length()))

    return 0
}

Salida

Ingresa tu nombre: Alice
Hola, Alice! Bienvenido a Nyx.
Longitud del nombre: 5

Explicación

print_no_newline(s) escribe un string a stdout sin agregar un salto de línea, a diferencia del print normal. Esta es la forma idiomática de mostrar un prompt en línea para que la entrada del usuario aparezca en la misma línea.

read_line() lee caracteres desde stdin hasta encontrar un carácter de nueva línea. El string devuelto puede incluir un \n al final dependiendo de la plataforma y de cómo se haya canalizado la entrada, así que llamar a .trim() es una buena práctica para eliminar espacios en blanco al inicio y al final.

La guarda if/else maneja con elegancia el caso de entrada vacía. En testing automatizado puedes proveer la entrada mediante redirección de shell: echo "Alice" | ./programa, lo cual hace que read_line() devuelva "Alice\n" sin bloquearse.

← Anterior Siguiente →

Source: examples/by-example/12-stdin-input.nx