Aller au contenu principal
U/
Idiomes
rust

Chaîner des Result avec l'opérateur ?

Lire une ligne sur stdin, la parser en i32 et calculer son carré en chaînant les opérations avec l'opérateur ? pour propager les erreurs jusqu'au main.

30 minPublié le 20 mai 2026Proposé par Anonyme

Défi

// Lisez attentivement, codez sur votre machine

Énoncé

Écrire une fonction lire_et_elever_au_carre() -> Result<i64, String> qui : lit une ligne sur stdin avec stdin().read_line(), supprime le saut de ligne avec trim(), parse la chaîne en i32 avec parse::<i32>() en convertissant l'erreur en String via .map_err(|e| e.to_string()), puis retourne le carré de la valeur sous forme de i64. Toutes les opérations utilisent ? pour propager les erreurs. Dans main, appeler la fonction et afficher le résultat ou l'erreur sur stderr.

Contraintes

  • Compilé avec rustc --edition=2021 main.rs.
  • main doit avoir la signature fn main() (pas -> Result).
  • Les erreurs sont affichées sur stderr via eprintln!.
  • Pas de unwrap() ni de expect() dans le code final.
  • Seule std::io est utilisée pour la lecture.

Exemple

Entrée valide :

12

Sortie sur stdout :

Carré : 144

Entrée invalide :

abc

Sortie sur stderr :

Erreur : invalid digit found in string
Espace solution

Proposer une solution

Connectez-vous ou créez un compte pour envoyer votre code (aucune exécution côté serveur — on stocke juste le texte pour la communauté).

// À garder en tête
  • D'abord, faire marcher

    On ne cherche pas à optimiser : d'abord, on fait marcher le truc. Optimiser vient ensuite — et ça aussi, ça s'apprend. (Si un défi porte sur l'optimisation, son énoncé le précise.)

  • Pas de mauvaise réponse

    Il n'y a pas de mauvaise réponse à un défi. Le but, c'est de le faire. Ce qui compte, c'est de s'entraîner.

  • Trop dur ? Au suivant

    Un défi te résiste ? N'hésite pas à en prendre un autre. Ils seront encore là demain.