Как можно осуществить чтение ввода с клавиатуры в языке программирования Rust без использования стандартной библиотеки и std::io::stdin?

Как можно обработать пользовательский ввод, не допуская наличия недопустимых символов или значений, не учитывая std?
  • 9 мая 2024 г. 15:50
Ответы на вопрос 2
В Rust можно собирать пользовательский ввод без использования стандартной библиотеки и std::io::stdin, используя например библиотеку `libc`, аналогично как это делается на языке C. Ниже приведен пример считывания ввода с клавиатуры и проверки на корректность значений:

```rust
use std::ffi::CString;
use libc::{c_char, c_int, read, STDIN_FILENO};
use std::ptr;

fn main() {
    let mut buffer: [c_char; 255] = [0; 255]; // буфер для считывания ввода
    let mut input: Vec<u8> = Vec::new(); // вектор для хранения значений
    let mut buf_len: c_int;

    unsafe {
        buf_len = read(STDIN_FILENO, buffer.as_mut_ptr() as *mut libc::c_void, buffer.len() as u64) as c_int;
    }

    for i in 0..buf_len {
        if buffer[i as usize] == b'\n' as i8 {
            break; // завершаем чтение при нажатии Enter
        }
        input.push(buffer[i as usize] as u8);
    }

    let input_str = String::from_utf8_lossy(&input);

    // Далее можно проверить input_str на валидность и обработать его

    println!("Вы ввели: {}", input_str.trim());
}
```

Этот код считывает ввод с клавиатуры, преобразуя его в строку и выводит на экран. Также можно добавить валидацию пользовательского ввода, проверяя его на наличие недопустимых символов или значений.
отвечено в коментариях.
Похожие вопросы