Input verwerken met ReadLine

ReadLine: Input van de gebruiker verwerken

Met de console kan je met een handvol methoden reeds een aantal interessante dingen doen.
Zo kan je bijvoorbeeld input van de gebruiker inlezen en bewaren in een variabele als volgt:
1
string result;
2
result = Console.ReadLine();
Copied!
Wat gebeurt er hier juist?
De eerste lijn code:
    Concreet zeggen we hiermee aan de compiler: maak in het geheugen een plekje vrij waar enkel data van het type string in mag bewaard worden (wat deze zin exact betekent komt later. Onthoud nu dat geheugen van het type string enkel "tekst" kan bevatten).
    Noem deze geheugenplek result zodat we deze later makkelijk kunnen in en uitlezen.
Tweede lijn code:
    Vervolgens roepen we de ReadLine methode aan. Deze methode zal de invoer van de gebruiker uitlezen tot de gebruiker op enter drukt.
    Het resultaat van de ingevoerde tekst wordt bewaard in de variabele result.
Merk op dat de toekenning in C# van rechts naar links gebeurt. Vandaar dat result dus links van de toekenning (=) staat en de waarde krijgt van het gedeelte rechts ervan.
Je programma zou nu moeten zijn:
1
Console.WriteLine("Hello World!");
2
Console.WriteLine("Hoi, ik ben het!");
3
Console.WriteLine("Wie ben jij?!");
4
string result;
5
result = Console.ReadLine();
Copied!
Start nogmaals je programma. Je zal merken dat je programma nu een cursor toont en wacht op invoer. Je kan nu eender wat intypen en van zodra je op enter duwt gaat het programma verder (in dit geval stopt het programma hierna dus).

Input gebruiker gebruiken

We kunnen nu invoer van de gebruiker, die we hebben bewaard in de variabele result, gebruiken en tonen op het scherm.
1
Console.WriteLine("Dag");
2
Console.WriteLine(result);
3
Console.WriteLine("hoe gaat het met je?");
Copied!
In de tweede lijn hier gebruiken we de variabele result (waar de invoer van de gebruiker in bewaard wordt) als parameter in de WriteLine-methode.
Met andere woorden: de WriteLine methode zal op het scherm tonen wat de gebruiker even daarvoor heeft ingevoerd.
Je volledige programma ziet er dus nu zo uit:
1
Console.WriteLine("Hello World!");
2
Console.WriteLine("Hoi, ik ben het!");
3
Console.WriteLine("Wie ben jij?!");
4
string result;
5
result = Console.ReadLine();
6
Console.WriteLine("Dag ");
7
Console.WriteLine(result);
8
Console.WriteLine("hoe gaat het met je?");
Copied!
Test het programma en voer je naam in wanneer de cursor knippert.
Voorbeelduitvoer (lijn 3 is wat de gebruiker heeft ingetypt)
1
Hoi, ik ben het!
2
Wie ben jij?!
3
tim [enter]
4
Dag
5
tim
6
hoe gaat het met je?
Copied!
Aanhalingsteken of niet?
Wanneer je de inhoud van een variabele wil gebruiken in een methode zoals WriteLine() dan plaats je deze zonder aanhalingsteken! Bekijk zelf eens wat het verschil wordt wanneer je volgende lijn code Console.Write(result); vervangt door Console.Write("result");.
De uitvoer wordt dan (merk het verschil op op lijn 5):
1
Hoi, ik ben het!
2
Wie ben jij?!
3
tim [enter]
4
Dag
5
result
6
hoe gaat het met je?
Copied!

Write en WriteLine

Naast WriteLine bestaat er ook Write.
De WriteLine-methode zal steeds een line break (een 'enter') aan het einde van de lijn zetten zodat de cursor naar de volgende lijn springt.
De Write-methode zal geen enter aan het einde van de lijn toevoegen. Als je dus vervolgens iets toevoegt (met een volgende Write of WriteLine) dan zal dit aan dezelfde lijn toegevoegd worden.
Vervang daarom eens in de laatste 3 lijnen code in je project alle WriteLine door Write:
1
Console.Write("Dag");
2
Console.Write(result);
3
Console.Write("hoe gaat het met je?");
Copied!
Voer je programma uit en test het resultaat. Je krijgt nu:
1
Hoi, ik ben het!
2
Wie ben jij?!
3
tim [enter]
4
Dagtimhoe gaat het met je?
Copied!
Wat is er verkeerd gelopen? Al je tekst van de laatste lijn plakt zo dicht bij elkaar? Inderdaad, we zijn spaties vergeten toe te voegen. Spaties zijn ook tekens die op scherm moeten komen (ook al zien we ze niet) en je dient dus binnen de aanhalingstekens spaties toe te voegen. Namelijk:
1
Console.Write("Dag ");
2
Console.Write(result);
3
Console.Write(" hoe gaat het met je?");
Copied!
Je uitvoer wordt nu:
1
Hoi, ik ben het!
2
Wie ben jij?!
3
tim [enter]
4
Dag tim hoe gaat het met je?
Copied!

Witregels in C#

C# trekt zich niets aan van witregels (zowel spaties, enters en tabs) die niét binnen aanhalingstekens staan. Met andere woorden: je kan het voorgaande programma perfect in één lange lijn code typen, zonder enters. Dit is echter niet aangeraden want het maakt je code een pak onleesbaarder.
Voorgaande programma in exact 1 lijn. Cool? Ja, in sommige kringen. Dom en onleesbaar? Ook ja.
Opletten met spaties
Let goed op hoe je spaties gebruikt bij WriteLine Indien je dus spaties buiten de aanhalingstekens plaatst dan heeft dit geen effect. In volgend voorbeeld zijn de spaties aangegeven als liggende streepjes ( _ ).
Hier een fout gebruik van spaties (de code zal werken maar je spaties worden genegeerd):
1
Console.Write("Dag"_);
2
Console.Write(result_);
3
Console.Write("hoe gaat het met je?");
Copied!
En een correct gebruik:
1
Console.Write("Dag_");
2
Console.Write(result);
3
Console.Write("_hoe gaat het met je?");
Copied!

Zinnen aan elkaar plakken

We kunnen dit allemaal nog een pak korter tonen zonder dat de code onleesbaar wordt. De plus-operator (+) in C# kan je namelijk gebruiken om tekst aan elkaar te plakken. De laatste 3 lijnen code kunnen dan korter geschreven worden als volgt:
1
Console.WriteLine("Dag " + result + " hoe gaat het met je?");
Copied!
Merk op dat result dus NIET tussen aanhalingstekens staat, in tegenstelling tot de andere stukken zin. Waarom is dit? Aanhalingstekens in C# duiden aan dat een stuk tekst moet beschouwd worden als tekst van het type string. Als je geen aanhalingsteken gebruikt dan zal C# de tekst beschouwen als een variabele met die naam.
Bekijk zelf eens wat het verschil wordt wanneer je volgende lijn code:
1
Console.WriteLine("Dag "+ result + " hoe gaat het met je?");
Copied!
Vervangt door:
1
Console.Write("Dag "+ "result" + " hoe gaat het met je?");
Copied!
Meer input vragen
Als je meerdere inputs van de gebruiker tegelijkertijd wenst te bewaren dan zal je meerdere geheugenplekken nodig hebben om de invoer te bewaren. Bijvoorbeeld:
1
Console.WriteLine("Geef leeftijd");
2
string leeftijd; //eerste geheugenplekje aanmaken
3
leeftijd = Console.ReadLine();
4
Console.WriteLine("Geef adres");
5
string adres; //tweede geheugenplekje aanmaken
6
adres = Console.ReadLine();
Copied!
Je mag echter ook de geheugenplekken al vroeger maken. In C# zet men de geheugenplek creatie zo dicht mogelijk bij de code waar je die plek gebruikt (zoals vorig voorbeeld), maar dat is geen verplichting. Dit mag dus ook:
1
string leeftijd; //eerste geheugenplekje aanmaken
2
string adres; //tweede geheugenplekje aanmaken
3
Console.WriteLine("Geef leeftijd");
4
leeftijd = Console.ReadLine();
5
Console.WriteLine("Geef adres");
6
adres = Console.ReadLine();
Copied!
Je zal vaak Console.WriteLine moeten schrijven als je dit boek volgt. We hebben echter goed nieuws voor je: er zit een ingebouwde "snippet" in VS om sneller ``Console.WriteLine op het scherm te toveren. We gaan je niet langer in spanning houden...of toch... nog even. Ben je benieuwd? Spannend he!
Hier gaan we: cw [tab] [tab]
Als je dus cw schrijft en dan twee maal op de tab-toets van je toetsenbord duwt verschijnt daar automagisch een verse lijn met Console.WriteLine();.
Wil je dit ook voor Console.ReadLine();? Dan zal je een eigen, custom, snippet aan VS moeten toevoegen. Dit wordt hier uitgelegd.

Kennisclip

Last modified 10d ago
Copy link