Menu
Coddy logo textTech

Struct mutabili

Fa parte della sezione Logica e flusso del percorso Rust di Coddy. Lezione 23 di 66.

Per impostazione predefinita, le istanze di struct in Rust sono immutabili: una volta create, non puoi modificarne i valori dei campi. Tuttavia, proprio come con le altre variabili, puoi rendere mutabile un'istanza di struct aggiungendo la parola chiave mut quando la dichiari.

Quando dichiari mutabile un’istanza di struct, puoi modificarne qualsiasi campo usando la notazione con il punto:

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

player.score = 100; // Questo funziona perché player è mutabile

Senza la parola chiave mut, tentare di modificare un campo causerebbe un errore di compilazione. La mutabilità si applica all’intera istanza della struct: non puoi rendere mutabili singoli campi lasciando gli altri immutabili.

challenge icon

Sfida

Facile

Riceverai quattro input: un nome del giocatore, un punteggio iniziale (come intero), un punteggio bonus da aggiungere (come intero) e una modifica finale del punteggio (come intero). Definisci una struct Player con due campi: name di tipo String e score di tipo i32. Crea un’istanza mutabile di questa struct, quindi modifica più volte il campo del punteggio usando i valori di input.

Requisiti:

  • Definisci una struct Player con i campi: name: String e score: i32
  • Leggi il primo input come nome del giocatore
  • Leggi il secondo input e convertilo in i32 per il punteggio iniziale
  • Crea un’istanza mutabile della struct Player con questi valori
  • Leggi il terzo input e convertilo in i32 per il punteggio bonus
  • Aggiungi il punteggio bonus al punteggio attuale del giocatore usando la notazione con il punto
  • Leggi il quarto input e convertilo in i32 per la modifica finale
  • Aggiungi la modifica finale al punteggio attuale del giocatore
  • Stampa le informazioni del giocatore nel formato esatto mostrato di seguito

Input:

  • Prima riga: nome del giocatore (ad es., Alice)
  • Seconda riga: punteggio iniziale come intero (ad es., 50)
  • Terza riga: punteggio bonus come intero (ad es., 30)
  • Quarta riga: modifica finale come intero (ad es., 20)

Output:

  • Prima riga: Player: [name]
  • Seconda riga: Final Score: [score]

Provalo tu

use std::io;

// TODO: Definisci qui la struct Player con i campi name e score

fn main() {
    // Leggi il nome del giocatore
    let mut name = String::new();
    io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // Leggi il punteggio iniziale
    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");
    
    // Leggi il punteggio bonus
    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");
    
    // Leggi la correzione finale
    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: Crea un'istanza mutabile di Player
    
    // TODO: Aggiungi il punteggio bonus al punteggio del giocatore
    
    // TODO: Aggiungi la correzione finale al punteggio del giocatore
    
    // TODO: Stampa l'output nel formato richiesto
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Rust online