Bisher geben Ihre Programme immer denselben Text aus. Interessant wird es, wenn ein Programm sich etwas merkt, damit rechnet und auf Eingaben reagiert. Dafür brauchen Sie Variablen.
Variablen: beschriftete Ablagen
Eine Variable ist eine Ablage mit einem Namen, in die Ihr Programm einen Wert legt. Später holt es den Wert über den Namen wieder heraus oder legt einen neuen hinein.
// variablen.cs
string name = "Ada";
int alter = 36;
Console.WriteLine(name);
Console.WriteLine(alter);
alter = 37;
Console.WriteLine(alter);
Ada
36
37
Die Zeile int alter = 36; heißt in Worten: „Lege eine Ablage namens alter für ganze Zahlen an und lege 36 hinein.“ Das
Gleichheitszeichen bedeutet in C# also nicht „ist gleich“, sondern „lege hinein“. In der vorletzten Zeile wird der alte Wert durch 37
ersetzt. Der Name bleibt, der Inhalt wechselt, daher das Wort „Variable“.
Jede Variable hat einen Typ
Vor dem Namen steht der Typ. Er legt fest, welche Art von Wert in die Ablage passt:
| Typ | Für | Beispiel |
|---|---|---|
string |
Text | string stadt = "Leipzig"; |
int |
ganze Zahlen (etwa bis plus und minus zwei Milliarden) | int anzahl = 12; |
double |
Zahlen mit Nachkommastellen | double laenge = 1.85; |
bool |
wahr oder falsch | bool erledigt = false; |
Im Code schreiben Sie Nachkommastellen immer mit Punkt: 1.85, nicht 1,85. Für Geldbeträge gibt es in C# einen eigenen, genaueren
Typ, decimal. Er kommt im Aufbaukurs dran.
Der Compiler achtet darauf, dass Typ und Wert zusammenpassen. Ein Text in einer Ablage für Zahlen ist ein Fehler, und das Programm startet nicht:
// falscher-typ.cs
int alter = "sechsunddreißig";
Console.WriteLine(alter);
Der Compiler meldet CS0029: Er kann den Typ string nicht in int umwandeln. Das ist eine gute Nachricht. Je mehr Fehler der
Compiler findet, desto weniger erleben Sie erst, wenn das Programm schon läuft.
Für Namen gelten ein paar Regeln: Sie beginnen mit einem Buchstaben, enthalten keine Leerzeichen, und Groß- und Kleinschreibung zählt.
Üblich ist, Variablen klein zu beginnen und jedes weitere Wort groß: anzahlNotizen, letzteEingabe. Umlaute wären erlaubt, sind aber
unüblich; schreiben Sie laenge statt länge. In diesem Kurs heißen die Variablen deutsch, damit Sie Ihre eigenen Wörter von denen
der Sprache unterscheiden. In professionellem Code sind Namen fast immer englisch; damit beginnt der Aufbaukurs.
Texte zusammensetzen
Steht vor einem Text ein Dollarzeichen $, setzt C# Werte in geschweiften Klammern { } ein:
// einsetzen.cs
string name = "Ada";
int tassen = 3;
Console.WriteLine($"{name} hat heute {tassen} Tassen Tee getrunken.");
Console.WriteLine("Ohne Dollarzeichen bleibt es bei {name}.");
Ada hat heute 3 Tassen Tee getrunken.
Ohne Dollarzeichen bleibt es bei {name}.
In den Klammern darf auch eine Rechnung stehen, zum Beispiel {tassen * 2}.
Rechnen
C# rechnet mit +, -, * (mal) und / (geteilt). Es gilt Punkt vor Strich, und Klammern gehen vor. Dazu kommt %, der Rest
einer Division:
// rechnen.cs
int a = 17;
int b = 5;
Console.WriteLine(a + b);
Console.WriteLine(a - b);
Console.WriteLine(a * b);
Console.WriteLine(a / b);
Console.WriteLine(a % b);
Console.WriteLine((a + b) * 2);
double c = 17;
Console.WriteLine(c / b);
22
12
85
3
2
44
3,4
Zwei Zeilen verdienen einen zweiten Blick:
17 / 5ergibt3, nicht 3,4. Sind beide Zahlen ganze Zahlen (int), ist auch das Ergebnis eine ganze Zahl, und der Rest fällt weg. Den Rest liefert17 % 5: 2. Diese Ganzzahl-Division überrascht fast jeden einmal. Sie ist aber oft genau das, was man braucht, etwa um 135 Minuten in 2 Stunden und 15 Minuten zu zerlegen.c / bergibt3,4, weilceindoubleist. Ob dort3,4oder3.4steht, hängt von der Spracheinstellung Ihres Rechners ab. Auf einem englisch eingestellten System und in Codespaces sehen Sie3.4.
Eingaben lesen
Console.ReadLine() wartet, bis jemand eine Zeile tippt und Enter drückt, und liefert diese Zeile als string:
// begruessung.cs
Console.Write("Wie heißen Sie? ");
string name = Console.ReadLine() ?? "";
Console.WriteLine($"Guten Tag, {name}!");
Wie heißen Sie? Ada
Guten Tag, Ada!
Jetzt zu dem ?? "", das Sie schon aus Lektion 1 kennen. Console.ReadLine() kann statt eines Textes auch gar nichts liefern,
in C# null genannt. Das passiert, wenn keine Eingabe mehr kommen kann, etwa weil jemand die Eingabe mit Strg+Z und Enter (Windows)
oder mit Strg+D (macOS, Linux) beendet hat. Der Compiler weiß das und warnt, wenn Sie den Fall übergehen. ?? "" heißt: „Wenn nichts kommt,
nimm einen leeren Text.“ So hat name in jedem Fall einen Text, und die Warnung verschwindet.
Aus Text wird eine Zahl
Eine Eingabe ist immer Text, auch wenn jemand Ziffern tippt. Mit Text rechnet C# nicht, sondern hängt ihn aneinander:
// text-ist-keine-zahl.cs
string eingabe = "36";
Console.WriteLine(eingabe + 1);
int alter = int.Parse(eingabe);
Console.WriteLine(alter + 1);
361
37
eingabe + 1 hängt die 1 an den Text „36“ an. Erst int.Parse macht aus dem Text „36“ die Zahl 36, mit der Sie rechnen können. So
sieht das mit einer echten Eingabe aus:
// naechstes-jahr.cs
Console.Write("Wie alt sind Sie? ");
string eingabe = Console.ReadLine() ?? "";
int alter = int.Parse(eingabe);
Console.WriteLine($"Nächstes Jahr sind Sie {alter + 1}.");
Wie alt sind Sie? 36
Nächstes Jahr sind Sie 37.
Probieren Sie aus, was passiert, wenn Sie „sechsunddreißig“ eingeben. Das Programm bricht mit einer langen Meldung ab, die mit
Unhandled exception. System.FormatException beginnt: int.Parse konnte aus dem Text keine Zahl machen. Eine solche Ausnahme
(englisch exception) beendet das Programm, und der Exit-Code ist nicht 0. Wie Sie eine Eingabe vorher prüfen, statt abstürzen zu
lassen, lernen Sie in der nächsten Lektion.
Übung 1
Schreiben Sie ein Programm wohnort.cs, das nach dem Namen und dann nach dem Wohnort fragt und danach einen Satz wie
„Ada wohnt in Leipzig.“ ausgibt.
Lösung 1
// wohnort.cs
Console.Write("Wie heißen Sie? ");
string name = Console.ReadLine() ?? "";
Console.Write("Wo wohnen Sie? ");
string ort = Console.ReadLine() ?? "";
Console.WriteLine($"{name} wohnt in {ort}.");
Wie heißen Sie? Ada
Wo wohnen Sie? Leipzig
Ada wohnt in Leipzig.
Übung 2
Schreiben Sie ein Programm minuten.cs. Es fragt nach einer Anzahl Minuten und gibt sie in Stunden und Minuten aus. Bei 135 soll dort
stehen: 135 Minuten sind 2 Stunden und 15 Minuten. Tipp: Eine Stunde hat 60 Minuten, und Sie kennen jetzt / und %.
Lösung 2
// minuten.cs
Console.Write("Wie viele Minuten? ");
int minuten = int.Parse(Console.ReadLine() ?? "");
int stunden = minuten / 60;
int rest = minuten % 60;
Console.WriteLine($"{minuten} Minuten sind {stunden} Stunden und {rest} Minuten.");
Wie viele Minuten? 135
135 Minuten sind 2 Stunden und 15 Minuten.
135 / 60 ergibt 2, weil der Rest wegfällt, und 135 % 60 ist genau dieser Rest, 15. Die Eingabe wird hier in einer einzigen Zeile
gelesen und umgewandelt. Das ist dasselbe wie die zwei Zeilen mit Console.ReadLine und int.Parse in naechstes-jahr.cs, nur kürzer.
Übung 3
Sagen Sie voraus, was dieses Programm ausgibt, bevor Sie es starten. Schreiben Sie Ihre Vorhersage auf und vergleichen Sie danach.
// vorhersage.cs
int x = 7;
int y = 2;
Console.WriteLine(x / y);
Console.WriteLine(x % y);
Console.WriteLine($"{x} + {y} = {x + y}");
Console.WriteLine("x + y");
x = x + y;
Console.WriteLine(x);
Lösung 3
3
1
7 + 2 = 9
x + y
9
7 / 2 ist als Ganzzahl-Division 3, der Rest ist 1. In der dritten Zeile setzt das Dollarzeichen die Werte und das Ergebnis ein. In
der vierten fehlt das Dollarzeichen, und in Anführungszeichen ist x + y einfach Text. x = x + y sieht wie eine falsche Gleichung
aus, heißt aber: „Rechne x plus y und lege das Ergebnis in x.“ Danach steht in x die 9.
Was Sie jetzt können
- Sie legen Variablen an, geben ihnen einen Typ und ändern ihren Wert.
- Sie unterscheiden
string,int,doubleundbool. - Sie setzen Werte mit
$"…{…}"in Texte ein. - Sie rechnen mit ganzen Zahlen und wissen, dass
/dabei den Rest abschneidet und%ihn liefert. - Sie lesen Eingaben mit
Console.ReadLine() ?? ""und machen mitint.ParseZahlen daraus.
Weiterlesen
- Work with numbers: Microsofts Tutorial über Zahlen, Rundung und die Grenzen der Zahlentypen.
- Store data with variables in C#: ein Modul aus dem Lernpfad „Get started with C#, Part 1“.
- Perform basic string formatting in C#: mehr über das Zusammensetzen von Texten.