Teil 19: Benutzereingaben
Lernziel: Interaktive Konsolenprogramme.
Voraussetzungen: Die vorherigen Lektionen, insbesondere Teil 18.
Worum geht es?
Mit der Standardbibliothek kannst du Eingaben über die Konsole lesen und auswerten.
Schritt für Schritt
use std::io::{self, Write};
fn main() {
print!("Temperatur in °C: ");
io::stdout().flush().expect("Ausgabe fehlgeschlagen");
let mut eingabe = String::new();
io::stdin().read_line(&mut eingabe).expect("Lesefehler");
let temperatur: f64 = match eingabe.trim().parse() {
Ok(wert) => wert,
Err(_) => {
eprintln!("Bitte eine gültige Zahl eingeben.");
return;
}
};
println!("{temperatur:.1} °C = {:.1} °F", temperatur * 1.8 + 32.0);
}
read_line() ergänzt Eingabetext in einem String, meist einschließlich Zeilenende. trim() entfernt führende und abschließende Leerraumzeichen, einschließlich Zeilenende.
flush() sorgt dafür, dass der Prompt auch ohne Zeilenumbruch sichtbar wird.
Tipp: Eine Eingabe sollte immer geprüft werden, bevor sie für Berechnungen genutzt wird.
Selbst ausprobieren
Frage nach Länge und Breite eines Rechtecks und berechne die Fläche. Bei ungültiger Eingabe soll eine Fehlermeldung erscheinen.
Musterlösung anzeigen
use std::io::{self, Write};
fn zahl(frage: &str) -> Option<f64> {
print!("{frage}: ");
io::stdout().flush().ok()?;
let mut s = String::new();
io::stdin().read_line(&mut s).ok()?;
s.trim().parse().ok()
}
fn main() {
match (zahl("Länge"), zahl("Breite")) {
(Some(l), Some(b)) => println!("Fläche: {}", l * b),
_ => eprintln!("Ungültige Eingabe"),
}
}
Das solltest du mitnehmen
- Interaktive Konsolenprogramme.
- Nutze
cargo runfür das Ausführen undcargo checkfür eine schnelle Fehlerprüfung (ab Teil 4). - Experimentiere mit veränderten Werten und beobachte die Compilermeldungen.
