Podsumowanie — bezpieczna funkcja dzielenia
Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 48 z 66.
Wyzwanie
ŁatwyOtrzymasz dwa dane wejściowe. Pierwsze to liczba reprezentująca dzielną, a drugie to liczba reprezentująca dzielnik. Utwórz funkcję safe_divide, która przyjmuje dwa parametry typu f64 i zwraca wartość typu Result<f64, &'static str>. Funkcja powinna zwracać Err("Cannot divide by zero"), gdy dzielnik wynosi zero, a w przeciwnym razie Ok z wynikiem dzielenia. Użyj wyrażenia match, aby obsłużyć wynik i wypisać odpowiedni komunikat.
Wymagania:
- Odczytaj pierwsze dane wejściowe (dzielną) i usuń białe znaki
- Parsuj pierwsze dane wejściowe do typu
f64 - Odczytaj drugie dane wejściowe (dzielnik) i usuń białe znaki
- Parsuj drugie dane wejściowe do typu
f64 - Utwórz funkcję
safe_divide, która przyjmuje dwa parametry typuf64i zwraca wartość typuResult<f64, &'static str> - Wewnątrz funkcji sprawdź, czy dzielnik wynosi
0.0:- Jeśli tak, zwróć
Err("Cannot divide by zero") - Jeśli nie, zwróć
Ok(dividend / divisor)
- Jeśli tak, zwróć
- Wywołaj funkcję z dwiema sparsowanymi liczbami
- Użyj wyrażenia
match, aby obsłużyć wartość typuResult - W ramieniu
Ok(value)wypisz:Division result: [value] - W ramieniu
Err(error)wypisz:Error: [error]
Dane wejściowe:
- Pierwszy wiersz: liczba reprezentująca dzielną (np.
20.0) - Drugi wiersz: liczba reprezentująca dzielnik (np.
4.0)
Wynik:
- Jeśli dzielenie się powiedzie:
Division result: [result] - Jeśli nastąpi dzielenie przez zero:
Error: Cannot divide by zero
Spróbuj swoich sił
use std::io;
// TODO: Utwórz tutaj funkcję safe_divide
// fn safe_divide(dividend: f64, divisor: f64) -> Result<f64, &'static str> {
// Twój kod tutaj
// }
fn main() {
// Wczytaj pierwszą wartość wejściową (dividend)
let mut dividend_input = String::new();
io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
// Wczytaj drugą wartość wejściową (divisor)
let mut divisor_input = String::new();
io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
// TODO: Wywołaj safe_divide i użyj match do obsługi Result
// Wypisz odpowiedni wynik
}Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane sterowanie przepływem
Wyrażenie „match”Dopasowywanie wielu wartościDopasowywanie zakresówWyrażenie „if let”Pętle jako wyrażeniaPodsumowanie — prosty parser poleceń4Grupowanie danych za pomocą struktur
Czym jest struktura?Przegląd strukturDostęp do pól strukturyModyfikowalne strukturyStruktury jako parametry funkcjiStruktury krotkowePodsumowanie — utwórz strukturę Book7Obsługa błędów za pomocą „Result”
Czym jest „Result”?Używanie „match” z „Result”is_ok() i is_err()Skróty: unwrap i expectOperator znaku zapytania „?”Konwertowanie ciągów znaków na liczbyPodsumowanie — bezpieczna funkcja dzielenia2Wprowadzenie do wektorów
Czym jest wektor?Tworzenie wektoraDodawanie elementów za pomocą pushDostęp do elementów wektoraIterowanie po wektorzeIterowanie z możliwością modyfikacjiUsuwanie elementówPodsumowanie — prosty licznik punktów5Pary klucz–wartość z mapami hashującymi
Czym jest mapa haszująca?Tworzenie mapy haszującejWstawianie par klucz–wartośćDostęp do wartościIterowanie po mapie haszującejAktualizowanie wartościUsuwanie paryPodsumowanie – licznik słów8Projekt: Prosty system inwentaryzacji
Konfiguracja projektuDodawanie produktuSprawdzanie stanu magazynowegoSprzedaż produktuŁączenie wszystkiego w całość3Lista zadań w wierszu poleceń
Konfiguracja projektuDodawanie zadaniaWyświetlanie wszystkich zadańUsuwanie zadaniaKońcowy kodPoćwicz samodzielnie: Kompilator Rust online