Записки о Rust
Сегодня тема: ввод с клавиатуры. Две не большие программки.
Одна - это просто ввод с клавиатуры строки, другая ввод с клавиатуры
с последующей попыткой преобразовать строку в целое число.
use std::io;
fn main() {
let mut input = String::new(); // строка для ввода
println!("Введите ваше имя:");.
// ввод с клавиатуры с проверкой ошибки с дописывания строки input
match io::stdin().read_line(&mut input) {
Ok(n) => {
println!("Всего {} байтов", n);
let mut input = "Привет ".to_string() + &input.trim() + &"!".to_string();
println!("{}", input);
}
Err(error) => {
println!("Ошибка при чтении: {}", error);
}
}
}
И так io::stdin().read_line(&mut input) ввод строки с клавиатуры.
Тут важно отметить, метод read_line() добавляет символы в строку,
не очищая её. Поэтому нужно использовать для этой цели
пустую строку. У нас она просто создаётся для этой цели.
Второе. Этот метод возвращает тип перечисление (enum). Поэтому
мы используем match. В зависимости от результата иы выполняем то или иное
действие. Да и не забудем про библиотеку std::io, она нужна для read_line().
В следующем примере мы вводим строку, а потом пытаемся преобразовать
её в число. Поэтому у нас вложенные операторы match.
use std::io;
use std::process;
fn main() {
let mut input = String::new(); // пустая строка
match io::stdin().read_line(&mut input) {
Ok(_) => {
// преобразовать строку в число
let number: i32 = match input.trim().parse() {
Ok(num) => num,
Err(_) => {
println!("Вы ввели некорректное значение!");
process::exit(1); // завершаем программу с кодом 1
}
};
}
Err(error) => {
println!("Ошибка при чтении: {}", error);
}
}
}
Внутренний match реагирует на ситуацию когда строка не может быть преобразована
в число. В этом случае программа заканчивает своё выполнение через использование
process::exit(1) - код выхода 1. Чтобы использовать этот метод мы подключили библиотеку
std::process.
Конечно, то что я здесь представил, надо бы обернуть в функции.
Т.е. создать свою библиотечку, которую можно использовать
в разных приложениях. Но об этом поговорим в одном из следующих постов.
Не забывайте, что оглавление по моим постам можно найти здесь
https://dzen.ru/a/aq_S5YWcNkgWfHcO
Оглавление тематическое, а на канале здесь темы идут не по порядку. Если у вас установлено приложение,
вы можете сразу перейти в канал