errors3 solution

This commit is contained in:
mo8it 2024-06-26 15:44:33 +02:00
parent 050a23ce67
commit c46d8bdf95
3 changed files with 46 additions and 12 deletions

View file

@ -4,6 +4,17 @@
use std::num::ParseIntError; use std::num::ParseIntError;
// Don't change this function.
fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
let processing_fee = 1;
let cost_per_item = 5;
let qty = item_quantity.parse::<i32>()?;
Ok(qty * cost_per_item + processing_fee)
}
// TODO: Fix the compiler error by changing the signature and body of the
// `main` function.
fn main() { fn main() {
let mut tokens = 100; let mut tokens = 100;
let pretend_user_input = "8"; let pretend_user_input = "8";
@ -14,14 +25,6 @@ fn main() {
println!("You can't afford that many!"); println!("You can't afford that many!");
} else { } else {
tokens -= cost; tokens -= cost;
println!("You now have {} tokens.", tokens); println!("You now have {tokens} tokens.");
} }
} }
fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
let processing_fee = 1;
let cost_per_item = 5;
let qty = item_quantity.parse::<i32>()?;
Ok(qty * cost_per_item + processing_fee)
}

View file

@ -675,8 +675,8 @@ If other functions can return a `Result`, why shouldn't `main`? It's a fairly
common convention to return something like `Result<(), ErrorType>` from your common convention to return something like `Result<(), ErrorType>` from your
`main` function. `main` function.
The unit (`()`) type is there because nothing is really needed in terms of The unit type `()` is there because nothing is really needed in terms of a
positive results.""" positive result."""
[[exercises]] [[exercises]]
name = "errors4" name = "errors4"

View file

@ -1 +1,32 @@
// Solutions will be available before the stable release. Thank you for testing the beta version 🥰 // This is a program that is trying to use a completed version of the
// `total_cost` function from the previous exercise. It's not working though!
// Why not? What should we do to fix it?
use std::num::ParseIntError;
// Don't change this function.
fn total_cost(item_quantity: &str) -> Result<i32, ParseIntError> {
let processing_fee = 1;
let cost_per_item = 5;
let qty = item_quantity.parse::<i32>()?;
Ok(qty * cost_per_item + processing_fee)
}
fn main() -> Result<(), ParseIntError> {
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ added
let mut tokens = 100;
let pretend_user_input = "8";
let cost = total_cost(pretend_user_input)?;
if cost > tokens {
println!("You can't afford that many!");
} else {
tokens -= cost;
println!("You now have {tokens} tokens.");
}
// Added this line to return the `Ok` variant of the expected `Result`.
Ok(())
}