mirror of
https://github.com/rust-lang/rustlings.git
synced 2024-12-25 23:10:30 +00:00
errors3 solution
This commit is contained in:
parent
050a23ce67
commit
c46d8bdf95
3 changed files with 46 additions and 12 deletions
|
@ -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)
|
|
||||||
}
|
|
||||||
|
|
|
@ -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"
|
||||||
|
|
|
@ -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(())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in a new issue