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,
}
}
Lecture des nombres
La fonction lire_nombre utilise une boucle pour s'assurer que l'entrée utilisateur est un nombre valide (f64).
Lecture de l'opération
La fonction lire_operation valide que l'utilisateur a saisi l'un des opérateurs autorisés (+, -, *, /).
Calcul des résultats
La fonction calculer utilise un match pour gérer chaque opération.
La division vérifie explicitement si le dénominateur est zéro pour éviter les erreurs.
Affichage des résultats
Si la division par zéro est tentée, le programme affiche une erreur grâce au type Option.
Opérations supplémentaires : Ajoutez des opérations comme l’exponentiation (^) ou le modulo (%).
Précision personnalisable : Permettez à l'utilisateur de définir le nombre de décimales dans le résultat.
Mode boucle : Proposez un mode où l'utilisateur peut effectuer plusieurs calculs sans redémarrer le programme.
Interface graphique (optionnel) : Utilisez une bibliothèque comme egui pour une calculatrice visuelle.