Add a keyboard mannager for users inputs:
cargo add k_board
Add calculator logic inside the program:
use k_board::{Keyboard, Keys};
use std::io;
fn main() {
let mut result: f64 = 0.0;
let first: f64 = get_number("first");
let second: f64 = get_number("second");
let operation: i8 = get_operation();
match operation {
0 => result = first + second,
1 => result = first - second,
2 => result = first * second,
3 => {
if second != 0.0 {
result = first / second
}
}
_ => {}
}
println!("The result is: {}", result);
}
fn get_number(position: &str) -> f64 {
let mut input: String = String::new();
println!("Enter the {} number: ", position);
io::stdin().read_line(&mut input).expect("Error");
let number: f64 = match input.trim().parse() {
Ok(number) => number,
Err(_) => get_number(position),
};
number
}
fn get_operation() -> i8 {
let mut operation: i8 = 0;
menu(&mut operation, 0);
for key in Keyboard::new() {
match key {
Keys::Up => menu(&mut operation, -1),
Keys::Down => menu(&mut operation, 1),
Keys::Enter => break,
_ => {}
}
}
operation
}
fn menu(operation: &mut i8, selection: i8) {
std::process::Command::new("clear").status().unwrap();
if *operation > 0 || *operation < 3 {
*operation += selection;
}
let mut op = vec![' ', ' ', ' ', ' '];
for i in 0..4 {
if i == *operation {
op[i as usize] = '*';
}
}
println!(
"{} Add\n{} Subtract\n{} Multiply\n{} Divide",
op[0], op[1], op[2], op[3]
);
}
Top comments (0)