Eingabe und Ausgabe
Kurz gesagt: Die Eingabe ist der Text, den ein Programm von der Tastatur liest: In C# liest du ihn mit Console.ReadLine, int.Parse wandelt ihn in eine Zahl um, und die Interpolation zeigt Zahlen in einem Format.
Problem
Das Programm kennt nur einen Namen
Das Programm begrüßt die Kundin mit Namen:
string name = "Maria";Console.WriteLine("Hallo, " + name + "!");Hallo, Maria!Es funktioniert, aber es begrüßt alle als Maria. Der Name steht im Code. Für jede neue Kundin musst du das Programm ändern und neu starten. Du willst, dass das Programm selbst fragt.
Die Idee
Von der Tastatur lesen
Wenn das Programm liest, hält es an und wartet. Die Person tippt und drückt Enter. Was sie tippt, ist die Eingabe des Programms.
class Program{ static void Main() { Console.Write("Wie heißt du? "); string name = Console.ReadLine(); Console.WriteLine("Hallo, " + name + "!"); }}MariaWie heißt du? Hallo, Maria!Console.ReadLine() liest eine Zeile, bis Enter.
Eingabe und Ausgabe sind hier getrennt gezeigt. In der Konsole erscheint der Name dort, wo du ihn tippst: nach „Wie heißt du? “. Deshalb steht die Frage mit Write: Die Antwort soll in derselben Zeile stehen.
Genauer, für Neugierige
- In einem Projekt aus
dotnet new consolegibt die Zeilestring name = Console.ReadLine();die Warnung CS8600. Der Grund:ReadLinegibtnull(nichts) zurück, wenn die Eingabe zu Ende ist. Das ist eine Warnung, kein Fehler, und das Programm läuft. Wie man mitnullarbeitet, siehst du später. Console.Read()liest nur ein Zeichen und gibt seinen Code als Zahl zurück. Im Kurs lesen wir immer ganze Zeilen.
Problem
12 + 30 = 1230
Der Kassierer gibt zwei Zahlungen ein, 12 € und 30 €. Das Programm soll die Gesamtsumme zeigen:
string first = Console.ReadLine();string second = Console.ReadLine();string total = first + second;Console.WriteLine("Gesamt: " + total + " €");1230Gesamt: 1230 €Statt 42 kam 1230 heraus. Das Programm hat sich nicht verrechnet. Es hat überhaupt nicht gerechnet.
Die Idee
Vom Text zur Zahl
Was die Person auch tippt, Console.ReadLine() gibt Text zurück. „12“ und „30“ sind zwei Texte, und + zwischen Texten klebt sie zusammen. Um zu rechnen, wandle den Text in eine Zahl um:
int first = int.Parse(Console.ReadLine());int second = int.Parse(Console.ReadLine());int total = first + second;Console.WriteLine("Gesamt: " + total + " €");1230Gesamt: 42 €Text in einen Wert eines anderen Typs umzuwandeln heißt Parsen (parse).
int.Parse(...)liefert einenint.double.Parse(...)liefert einendouble.- Für die anderen Typen gibt es dasselbe:
long.Parse,bool.Parseund so weiter.
Die Summe hier ist die erste Rechnung im Kurs. Subtraktion, Multiplikation und Division kommen in der nächsten Lektion.
int first = int.Parse(Console.ReadLine());int second = int.Parse(Console.ReadLine());int total = first + second;Console.WriteLine("Gesamt: " + total + " €");Schritt für Schritt, in Worten
- Die Person tippt 12 und Enter. Console.ReadLine() gibt den Text "12" zurück, keine Zahl.
- int.Parse wandelt den Text in die Zahl 12 um. Sie kommt in first.
- 30 nimmt denselben Weg: Text, Parsen, eine Zahl in second.
- Jetzt addiert + Zahlen: 12 + 30 = 42.
- Ausgegeben wird „Gesamt: 42 €“.
Genauer, für Neugierige
- Ist der Text keine Zahl (zum Beispiel „zwölf“), stoppt das Programm mit einem Fehler:
FormatException. Wie man so einen Fehler abfängt, siehst du im Modul „Fehler und Exceptions“.
int.TryParseprüft, ohne das Programm zu stoppen. Du nutzt es mitifundout, die später kommen.
- Das Dezimaltrennzeichen hängt von den regionalen Einstellungen des Computers ab. Auf einem Computer mit deutschen Einstellungen stoppt
double.Parse("3.5")mit einem Fehler und will ein Komma:3,5. Die Beispiele im Kurs nutzen einen Punkt.
Probier es aus
Wie viele Tickets?
Das Programm liest, wie viele Erwachsene und wie viele Kinder es sind.
23Was gibt das Programm aus?
int adults = int.Parse(Console.ReadLine());int children = int.Parse(Console.ReadLine());Console.WriteLine("Tickets: " + adults + children);"Tickets: " + adults ist schon der Text „Tickets: 2“, und Text + 3 klebt die 3 ans Ende. Mit Klammern wird zuerst die Summe berechnet: "Tickets: " + (adults + children) ergibt „Tickets: 5“.Die Idee
Zahlen so, wie du sie willst
In der letzten Lektion kam der Preis 49.90 als 49.9 heraus. Bei einem Preis willst du immer zwei Stellen nach dem Dezimalpunkt. Das ist formatierte Ausgabe:
string product = "Kopfhörer";double price = 49.9;int qty = 2;Console.WriteLine($"{product}: {price:F2} €");Console.WriteLine($"{qty} Stück im Warenkorb");string label = $"Preis: {price:F2} €";Console.WriteLine(label);Kopfhörer: 49.90 €2 Stück im WarenkorbPreis: 49.90 €$ vor den Anführungszeichen erlaubt dir, Werte direkt in den Text zu schreiben, in geschweiften Klammern: {product}. Das heißt String-Interpolation.
Nach einem Doppelpunkt schreibst du das Format: {price:F2} heißt Kommazahl mit genau 2 Stellen nach dem Punkt. F0 hat keine Stellen nach dem Punkt, F3 hat drei.
Der Wert in der Variable ändert sich nicht. Das Format entscheidet nur, wie er bei der Ausgabe aussieht.
Genauer, für Neugierige
- Tausendertrennzeichen und Ausrichten in Spalten:
double total = 1234.5;Console.WriteLine($"Gesamt: {total:N2} €");Console.WriteLine($"{"Kaffee",-10}|{2.5,8:F2}");Console.WriteLine($"{"Laptop",-10}|{1299.0,8:F2}");Gesamt: 1,234.50 €Kaffee | 2.50Laptop | 1299.00N2 fügt ein Tausendertrennzeichen hinzu. Die Zahl nach dem Komma ist die Breite: {2.5,8:F2} belegt 8 Zeichen, rechtsbündig, und -10 richtet linksbündig aus.
Es gibt auch eine ältere Schreibweise mit derselben Bedeutung: Console.WriteLine("{0}: {1:F2} €", product, price);. Du wirst sie in fremdem Code sehen.
- Auch hier zählen die regionalen Einstellungen. Auf einem Computer mit deutschen Einstellungen ergibt
F2den Wert49,90, und das Tausendertrennzeichen ist ein Punkt:1.234,50. Die Ausgabe in den Lektionen nutzt einen Punkt.
In C# folgt sogar ein gewöhnliches "Preis: " + price den Einstellungen. Auf einem Computer mit deutschen Einstellungen kommt der Preis aus der letzten Lektion als 49,9 heraus.
Probier es aus
Zwei Stellen
Eine Nacht im Hotel kostet 65.5 €. Es soll „Pro Nacht: 65.50 €“ herauskommen. Was gehört in die Lücke?
Console.WriteLine($"Pro Nacht: {price:} €");F2: eine Kommazahl mit genau zwei Stellen nach dem Punkt.
Probier es aus
Finde den Fehler
Das Programm fragt, wie viele Tickets es reservieren soll. Es lässt sich nicht kompilieren. In welcher Zeile ist der Fehler?
Wähle die Zeile mit dem Fehler.
Console.ReadLine() gibt Text zurück, und tickets ist ein int. Der Compiler wandelt Text nicht von selbst in eine Zahl um: „CS0029: Cannot implicitly convert type 'string' to 'int'“. Die Korrektur ist int tickets = int.Parse(Console.ReadLine());.Übung
Programme, die fragen
Löse die Aufgaben in deinem Editor. Die Eingabe ist eine Zeile pro Wert. Gib keine Fragen wie „Gib einen Namen ein:“ aus, damit deine Ausgabe mit dem Beispiel übereinstimmt.
1. Begrüßung mit Namen. Lies einen Namen und begrüße die Person.
MariaHallo, Maria!2. Summe zweier Zahlen. Lies zwei ganze Zahlen und gib die Rechnung aus.
172517 + 25 = 423. Zwei Texte in einem. Lies zwei Texte und gib sie zusammen aus, mit einem Leerzeichen dazwischen.
VelikoTarnovoVeliko Tarnovo4. π mit zwei Stellen. Speichere π als 3.14159265358979 in einer Variable und gib es mit zwei Stellen nach dem Punkt aus. Den fertigen Wert Math.PI gibt es in der nächsten Lektion.
3.14Weitere Aufgaben
- Alter. Lies einen Namen und ein Alter (eine ganze Zahl) und gib „Maria ist 19 Jahre alt.“ aus.
- Eine Visitenkarte von der Tastatur. Lies einen Namen, einen Beruf und eine Telefonnummer und gib damit die Visitenkarte aus der Lektion „Dein erstes Programm“ aus.
- Ein Preis mit zwei Stellen. Lies einen Preis als Kommazahl und gib ihn mit zwei Stellen und dem Eurozeichen aus: Bei der Eingabe
7.5ist die AusgabePreis: 7.50 €. - Summe zweier Preise. Lies zwei Preise als Kommazahlen und gib ihre Summe mit zwei Stellen aus: Bei der Eingabe
12.4und3.15ist die AusgabeGesamt: 15.55 €.
Test
Teste dich
Verwandte Lektionen
Abschnitt „Verwandte Lektionen“- Baut auf: Dein erstes Programm · Variablen und Typen
- Geht weiter in: Operatoren und Arithmetik · Bedingungen · Schleifen · Arrays
- Aufgaben zum Thema: Sprachgrundlagen