Exemple de solution

use std::io;

fn main() {
    println!("Bienvenue dans la calculatrice simple.");

    // Lire le premier nombre
    let num1 = lire_nombre("Entrez le premier nombre :");

    // Lire le deuxième nombre
    let num2 = lire_nombre("Entrez le deuxième nombre :");

    // Lire l'opération
    let operation = lire_operation();

    // Effectuer le calcul
    match calculer(num1, num2, operation) {
        Some(resultat) => println!("Le résultat de {} {} {} est : {:.2}", num1, operation, num2, resultat),
        None => println!("Erreur : division par zéro impossible."),
    }
}

fn lire_nombre(message: &str) -> f64 {
    loop {
        println!("{}", message);

        let mut input = String::new();
        io::stdin()
            .read_line(&mut input)
            .expect("Erreur lors de la lecture.");

        match input.trim().parse::<f64>() {
            Ok(value) => return value,
            Err(_) => println!("Veuillez entrer un nombre valide."),
        }
    }
}

fn lire_operation() -> char {
    loop {
        println!("Choisissez une opération (+, -, *, /) :");

        let mut input = String::new();
        io::stdin()
            .read_line(&mut input)
            .expect("Erreur lors de la lecture.");

        let operation = input.trim();
        if ["+", "-", "*", "/"].contains(&operation) {
            return operation.chars().next().unwrap();
        } else {
            println!("Veuillez entrer une opération valide (+, -, *, /).");
        }
    }
}

fn calculer(num1: f64, num2: f64, operation: char) -> Option<f64> {
    match operation {
        '+' => Some(num1 + num2),
        '-' => Some(num1 - num2),
        '*' => Some(num1 * num2),
        '/' => {
            if num2 != 0.0 {
                Some(num1 / num2)
            } else {
                None
            }
        }
        _ => None,
    }
}

Explications du code

  1. Lecture des nombres

  2. Lecture de l'opération

  3. Calcul des résultats

  4. Affichage des résultats

Améliorations possibles

  1. Opérations supplémentaires : Ajoutez des opérations comme l’exponentiation (^) ou le modulo (%).

  2. Précision personnalisable : Permettez à l'utilisateur de définir le nombre de décimales dans le résultat.

  3. Mode boucle : Proposez un mode où l'utilisateur peut effectuer plusieurs calculs sans redémarrer le programme.

  4. Interface graphique (optionnel) : Utilisez une bibliothèque comme egui pour une calculatrice visuelle.