Menu
Coddy logo textTech

Modyfikowalne struktury

Część sekcji Logika i przepływ programu ścieżki Rust w Coddy. Lekcja 23 z 66.

Domyślnie instancje struktur w Rust są niezmienne — po ich utworzeniu nie możesz zmieniać wartości ich pól. Jednak, podobnie jak w przypadku innych zmiennych, możesz uczynić instancję struktury zmienną, dodając słowo kluczowe mut podczas jej deklarowania.

Gdy zadeklarujesz mutowalną instancję struktury, możesz modyfikować dowolne jej pola za pomocą notacji kropkowej:

let mut player = Player {
    name: String::from("Alice"),
    score: 0,
};

player.score = 100; // To działa, ponieważ player jest modyfikowalny

Bez słowa kluczowego mut próba zmiany pola spowodowałaby błąd kompilacji. Modyfikowalność dotyczy całej instancji struktury — nie możesz uczynić poszczególnych pól modyfikowalnymi, pozostawiając pozostałe niemodyfikowalne.

challenge icon

Wyzwanie

Łatwy

Otrzymasz cztery dane wejściowe: imię gracza, wynik początkowy (jako liczbę całkowitą), wynik bonusowy do dodania (jako liczbę całkowitą) oraz końcową korektę wyniku (jako liczbę całkowitą). Zdefiniuj strukturę Player z dwoma polami: name typu String oraz score typu i32. Utwórz mutowalną instancję tej struktury, a następnie kilkukrotnie zmodyfikuj pole wyniku, używając wartości wejściowych.

Wymagania:

  • Zdefiniuj strukturę Player z polami: name: String oraz score: i32
  • Odczytaj pierwsze dane wejściowe jako imię gracza
  • Odczytaj drugie dane wejściowe i przekonwertuj je na i32, aby uzyskać wynik początkowy
  • Utwórz mutowalną instancję struktury Player z tymi wartościami
  • Odczytaj trzecie dane wejściowe i przekonwertuj je na i32, aby uzyskać wynik bonusowy
  • Dodaj wynik bonusowy do bieżącego wyniku gracza, używając notacji kropkowej
  • Odczytaj czwarte dane wejściowe i przekonwertuj je na i32, aby uzyskać końcową korektę
  • Dodaj końcową korektę do bieżącego wyniku gracza
  • Wypisz informacje o graczu dokładnie w formacie pokazanym poniżej

Dane wejściowe:

  • Pierwszy wiersz: imię gracza (np. Alice)
  • Drugi wiersz: wynik początkowy jako liczba całkowita (np. 50)
  • Trzeci wiersz: wynik bonusowy jako liczba całkowita (np. 30)
  • Czwarty wiersz: końcowa korekta jako liczba całkowita (np. 20)

Dane wyjściowe:

  • Pierwszy wiersz: Player: [name]
  • Drugi wiersz: Final Score: [score]

Spróbuj swoich sił

use std::io;

// TODO: Zdefiniuj tutaj strukturę Player z polami name i score

fn main() {
    // Wczytaj imię gracza
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Wczytaj początkowy wynik
    let mut initial_score = String::new();
    io::stdin().read_line(&mut initial_score).expect("Failed to read line");
    let initial_score: i32 = initial_score.trim().parse().expect("Invalid number");
    
    // Wczytaj punkty bonusowe
    let mut bonus = String::new();
    io::stdin().read_line(&mut bonus).expect("Failed to read line");
    let bonus: i32 = bonus.trim().parse().expect("Invalid number");
    
    // Wczytaj końcową korektę wyniku
    let mut adjustment = String::new();
    io::stdin().read_line(&mut adjustment).expect("Failed to read line");
    let adjustment: i32 = adjustment.trim().parse().expect("Invalid number");
    
    // TODO: Utwórz modyfikowalną instancję Player
    
    // TODO: Dodaj punkty bonusowe do wyniku gracza
    
    // TODO: Dodaj końcową korektę do wyniku gracza
    
    // TODO: Wypisz wynik w wymaganym formacie
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator Rust online