/
inhosin
/
basic-rust-lessons
Обзор
Документация
Войти
/
inhosin
/
basic-rust-lessons
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
practicum/task2/src/main.rs
136 строк
4 KB
Denis Basargin
Practicum: task 2
28 янв 2026, 19:28
28 янв 2026, 19:28
a0c1eb4
Код
Авторство
О чём код?
/** Максимум из двух: Сравните два числа и выведите большее. */ use std::cmp::Ordering::{Equal, Greater, Less}; use std::{fmt, io}; use std::io::stdin; fn main() -> Result<(), InputError> { println!("Вариант 1"); variant1(); println!("Вариант 2"); variant2(); println!("Вариант 3"); variant3() } // region: Вариант 1 fn variant1() { let num1 = match read_user_input("Введите первое число:") { Some(n) => n, None => return }; let num2 = match read_user_input("Введите второе число:") { Some(n) => n, None => return }; /*if num1 > num2 { println!("Число {} больше {}", num1, num2); } else if num1 == num2 { println!("Число {} равно {}", num1, num2); } else { println!("Число {} меньше {}", num1, num2); }*/ // Более грамотное сравнение match num1.cmp(&num2) { Greater => println!("{} > {}", num1, num2), Equal => println!("{} = {}", num1, num2), Less => println!("{} < {}", num1, num2), } } fn read_user_input(prompt: &str) -> Option<i32> { println!("{}", prompt); let mut input = String::new(); if let Err(err) = stdin().read_line(&mut input) { println!("Ошибка ввода: {}", err); return None; } match input.trim().parse::<i32>() { Ok(num) =>Some(num), Err(err) => { println!("Ошибка парсинга: {}", err); None } } } // endregion // region: Вариант 2 macro_rules! read_int { ($prompt:expr) => { { let mut input = String::new(); println!("{}", $prompt); io::stdin().read_line(&mut input).expect("Ошибка ввода"); input.trim().parse::<i32>().expect("Ошибка парсинга") } }; } fn variant2() { let num1 = read_int!("Введите первое число:"); let num2 = read_int!("Введите второе число:"); println!( "{} {}", num1, match num1.cmp(&num2) { Greater => format!("> {}", num2), Equal => "= {}".to_string(), Less => format!("< {}", num2), } ); } // endregion // region: Вариант 3 #[derive(Debug)] enum InputError { Io(io::Error), Parse(String), } impl fmt::Display for InputError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match self { InputError::Io(e) => write!(f, "Ошибка ввода: {}", e), InputError::Parse(e) => write!(f, "Ошибка парсинга: {}", e), } } } impl From<io::Error> for InputError { fn from(error: io::Error) -> Self { InputError::Io(error) } } fn read_number(prompt: &str) -> Result<i32, InputError> { println!("{}", prompt); let mut input = String::new(); stdin().read_line(&mut input)?; let num = input.trim().parse::<i32>().map_err(|e| InputError::Parse(e.to_string()))?; Ok(num) } fn variant3() -> Result<(), InputError> { let num1 = read_number("Введите первое число:")?; let num2 = read_number("Введите второе число:")?; match num1.cmp(&num2) { Greater => println!("{} > {}", num1, num2), Equal => println!("{} = {}", num1, num2), Less => println!("{} < {}", num1, num2), } Ok(()) } // endregion