Archief - [PROG]C# ja/neen-invoer opvangen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

maxdevis

Legacy Member
een ja nee invoer opvangen, doe je dat best met do while of een while lus?
en en hoe stel je die voorwaarde, want ik vind dat maar niet.

System.Console.WriteLine("Wilt u deze map gebruiken? Typ y voor ja en n voor neen.");
keuze = Convert.ToChar(Console.ReadLine());
while(keuze != ('y'|'Y'|'n'|'N'))
{
System.Console.WriteLine(" Typ y voor ja en n voor neen.");
keuze = Convert.ToChar(Console.ReadLine());
}
if(keuze==('y'|'Y'))
{
break;
}

else{
mapnaam = "";
goto case 3;
}

kan je die readline beperken tot 1 character? dus dat de gebruiker maar 1 teken kan invoeren?

maatje

Legacy Member
je kan ook met een if constructie en die controleert door die messagebox of er op Ja/Neen gedrukt is.

maxdevis

Legacy Member
heb het na uren frustratie zo opgelost:
while (keuze != ('y') & keuze != ('Y') & keuze != ('n') & keuze != ('N'))

blijft wel nog de vraag hoe je een gebruiker limiteerd tot het invoeren van slechts 1 teken

Qkyrie

Legacy Member
ik doe geen C#, maar heb C gedaan ooit.
Mss om de gebruiker te limiteren tot 1teken => variable (=keuze) declareren als char.
kweet niet als het zal helpen

maxdevis

Legacy Member
zoals je kan zien is keuze al als char gedeclareerd.
probleem is dat je in je console zoveel als je wil, kan typen en dan pas converteerd hij dat naar een char, en dan krijg je een system.formatexception.

toch bedankt!

.:KrusT:.

Legacy Member
Je kan misschien eens proberen met Console.ReadKey(). Deze zou naar't schijnt slechts 1 karakter uitlezen.

JBoss

Legacy Member
Het probleem met een console is dat het normaal gezien buffered is, en dat je normaliter dus ook pas data krijgt als de gebruiker een ENTER drukt

killgore

Legacy Member
wat JBoss zegt

enneuh: werkt die enkele |, wat in de context die jij ze daar gebruikt lijkt me het vrij onlogisch moest het zo werken :s.

maxdevis

Legacy Member
killgore zei:
enneuh: werkt die enkele |, wat in de context die jij ze daar gebruikt lijkt me het vrij onlogisch moest het zo werken :s.

neen die werkt niet,
dat is nu net de (hoofd)vraag van deze thread
:p

Tyfius

Legacy Member
volgens mij moet dat OR worden, dus || en uw & zou && moeten zijn.

JBoss

Legacy Member
Het mag, de enkele tekens zijn bitwise logic terwijl de dubbele hetzelfde doet maar shortcutted. In zijn geval gaat ie alles checken ook al is de conditie reeds voldaan
edit: enkel in geval van booleans dan wel :(

JBoss

Legacy Member
en verder denk ik dan ook dat het moet worden

System.Console.WriteLine("Wilt u deze map gebruiken? Typ y voor ja en n voor neen.");
keuze = Convert.ToChar(Console.ReadLine());
while(keuze != 'y' || keuze != 'Y' ...)
{
System.Console.WriteLine(" Typ y voor ja en n voor neen.");
keuze = Convert.ToChar(Console.ReadLine());
}
if(keuze=='y' || keuze == 'Y'))
{
break;
}

else{
mapnaam = "";
goto case 3;
}

dJeez

Legacy Member
Om 1 karakter in te lezen gebruik je Console.Read of - in dit geval - beter nog Console.ReadKey, zoals je in de Class Library reference kan terugvinden.

:wtf: Ziet mijn lodderig oog daar nu echt een goto statement staan? Deed de lobotomie pijn?

maxdevis

Legacy Member
dJeez zei:
Om 1 karakter in te lezen gebruik je Console.Read of - in dit geval - beter nog Console.ReadKey, zoals je in de Class Library reference kan terugvinden.

:wtf: Ziet mijn lodderig oog daar nu echt een goto statement staan? Deed de lobotomie pijn?


kan ik best iets anders gebruiken?
wat is lobotomie?

killgore

Legacy Member
Tyfius zei:
volgens mij moet dat OR worden, dus || en uw & zou && moeten zijn.
zijn enkele & klopt, dat is ongeveer hetzelfde als &&, maar zonder short-circuiting, zoals jboss zegt, omdat ie op booleans werkt. Op andere vars zou dat een binaire op worden.

Die | hier wordt ten eerste al bitsgewijs gebruikt en is ten tweede totaal fout geredeneerd.

Stel zelfs dat je || zou gebruiken en dat c# || toelaat op non-boolean waarden (niet-nul is dan true :p), dan zou
Code:
'y'||'Y'||'N'||'n'
gewoon evalueren naar "true", omdat minstens 1 van die tekens (allen hier zelfs) niet nul is.

het "juiste" is gewoon if(input == 'y' || input =='Y' || ...)

dJeez

Legacy Member
maxdevis zei:
wat is lobotomie?
:offtopic: Er bestaat zo een uitvinding, doorgaans in boekvorm, waar je de betekenis van woordjes in kan opzoeken, ze noemen dat - vraag mij niet waarom - een verklarend woordenboek.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan