We nemen terug ons eerste programma erbij en gaan hieraan verder werken:
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:
Bespreking van deze code:
string result;
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;
Noem deze geheugenplek result
zodat we deze later makkelijk kunnen in en uitlezen.
result = Console.ReadLine();
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
(denk eraan dat de toekenning van rechts naar links gebeurt).
Je programma zou nu moeten zijn:
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).
We kunnen nu invoer van de gebruiker, die we hebben bewaard in de variabele result
, gebruiken en tonen op het scherm.
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:
Test het programma en voer je naam in wanneer de cursor knippert.
Voorbeelduitvoer (lijn 3 is wat de gebruiker heeft ingetypt)
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:
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 de laatste 3 lijnen code in je project door:
Voer je programma uit en test het resultaat. Je krijgt nu:
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:
Je uitvoer wordt nu:
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. Indien je deze erbuiten plaats dan heeft dit geen effect (je wist al uit het eerste hoofdstuk dat C# alle witregels negeert die niet tussen aanhalingstekens staan). In volgend voorbeeld zijn de spaties aangegeven als liggende streepjes ( _ ).
Fout (de code zal werken maar je spaties worden genegeerd):
Correct:
Een leuke conversatie uit de oude doos:
fuck0ff: hi, does someone here know the escape sequence for a blank? fuck0ff: hello? a blank ? fuck0ff: escape sequence like 't' for tab, and blank like the things you do between words. ? fuck0ff: it's for a c program fuck0ff: has the channel #programming anything to do with, like to program? MadSciFab: why do u need an escape sequence for a blank space? MakAtak: err.. is that what you call "space"? Bron: bash.org
We kunnen dit hele verhaal een pak korter tonen. De plus-operator (+
) in C# kan je namelijk gebruiken om variabelen van het type string aan elkaar te plakken. De laatste 3 lijnen code kunnen korter geschreven worden als volgt:
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 vervangt door de lijn er onder:
Als je meerdere inputs van de gebruiker tegelijkertijd wenst te bewaren dan zal je meerdere geheugenplekken nodig hebben om de invoer te bewaren. Bijvoorbeeld:
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: