Einzelnes Zeichen einlesen und anschließend Eingabe abbrechen

B

ByeBye 31659

Hallo,

ich bin in C# total neu und habe versucht mir meine Antwort hier in Tutorials oder im Forum zu suchen leider ohne Erfolg.

Also mein Problem:
Ich möchte dem Benutzer eine Auswahl vorgeben und er darf dann nur mit den Zahlen 0,1 und 2 wählen und die Eingabe soll nicht auf ein Enter warten. Sollte nicht 0,1, oder 2 angegeben werden so soll nichts passieren.

Weiß da jemand Rat?

Mein Code
Code:
using System;

namespace ConsoleApplication1
{
	class Class1
	{
		static void Main(string[] args)
		{
			
			int iAuswahl = 0;

			Console.WriteLine("\tHallo, wie geht es Dir?\n");
			Console.WriteLine("\tSuper\t(0)");
			Console.WriteLine("\tGeht so\t(1)");
			Console.WriteLine("\tSchlecht(2)\n");
			Console.Write("\tEingabe: ");
			iAuswahl = Convert.ToInt32(Console.ReadLine());
			Console.WriteLine(iAuswahl);
		}
	}
}

Ich hab auch bereits versucht nur Console.Read() zu benutzen, aber da schmeißt er mir eine total falsche Zahl wieder aus.
 
Hallo.

Ich weiss nicht, ob es genau das ist, was du suchst, aber hier mal ein Vorschlag:
Code:
...
bool weiter = true;
...
while(weiter)
{
    if(e.KeyChar == '0')
    {
        /* Hier behandelst du die Eingabe von '0' */
        weiter = false;
    }
    if(e.KeyChar == '1')
    {
        /* Hier behandelst du die Eingabe von '1' */
        weiter = false;
    }
    if(e.KeyChar == '2')
    {
        /* Hier behandelst du die Eingabe von '2' */
        weiter = false;
    }
    else
    {
        MessageBox.Show("Falsche Eingabe.");
        /* weiterer Code, z.B. eine Ausnahme werfen */
    }
}
...
Ich hoffe mal, das gibt dir zumindest einen Denkansatz; ;)

Gruß, Niko

<edit>
Ich sollte wohl dazu sagen, dass ich das so bei Windows.Forms mache...
Für Konsolenanwendungen muss ich nochmal kurz mein Codebuch konsultieren.
Werde das dann in einem 2.ten "edit" posten.
</edit>

<edit2>
Also alles, was ich dazu gefunden habe, wäre "Console.In.Peek", siehe hier, wenn du auf Bearbeiten->Suchen(aktuelle Seite)->"Console.In.Peek" gehst, genauer gesagt zum Beitrag eines gewissen Jarod_24.
Code:
Dim intIn As Integer, bChar As Boolean = False

'Do loop until we got a key
intIn = Console.In.Peek()
If (intIn <> -1) Then bChar = True
'Loop Until bChar

Select Case intIn
    Case Keys.F1
    Call about()
End Select

In C# also in etwa so(wenn ich richtig übersetzt habe):
Code:
int intIn = 0;
bool bChar = False;

/* Do loop until we got a key */
intIn = Console.In.Peek()
If (intIn != -1) 
{
    bChar = True;
}
/* Loop Until bChar */

switch (intIn):
{
    Case Keys.0: {tuEtwasWenn0();}
    Case Keys.1: {tuEtwasWenn1();}
    Case Keys.2: {tuEtwasWenn2();}
    ...    
}
</edit2>
 
Zuletzt bearbeitet:
Also hab das grad auch probiert, weil ich sowas schon lange gesucht habe, nur funkt das nicht so ganz. Weil er lässt mich "x" Zeichen einlesen und wartet auf ein Enter, und gibt jedes mal 49 aus. Ich glaube aber hier wird benötigt eine Eingabe von genau 1nem Zeichen, ohne einer eingabe von Enter.

mfg Rauchmelder
 
Hallo.

Ich habe mir auch noch mal genauer Gedanken darüber gemacht.
Also in C kenne ich eine Funktion namens "getchar", mit welcher man einzelne Zeichen von der Tastatur übernimmt. :suspekt:
In C# bzw. .NET ist mir so eine Methode allerdings nicht bekannt.
Gestern erst habe ich noch ein wenig rumprobiert mit "Console.In.Peek" und anderen Membern von Console, bekam aber nicht das richtige Ergebnis (Idee war, einen Input-Stream für genau ein Zeichen zu öffnen, dies zu übernehmen und ihn dann wieder zu schließen);
eine Bestätigung mit Enter wurde aber leider immer verlangt. :confused:

:-( Tut mir leid ExtremeSnail, aber ich fürchte ich kann dir bei Konsolenanwendungen da nicht weiterhelfen. (Für Windows.Forms siehe Lösung in meinem oberen Post)

Gruß, Niko
 
Ich bin bisher leider aus Zeitgründen nicht zum Testen gekommen (Freundin und so *gg*).

Totzdem vielen Dank für den Tipp, ich werde noch ein wenig weiter suchen.

Auf jedenfall möchte ich die Eingabe nicht mit Enter bestätigen und in C++ ist es getch() ist mir soweit bekannt, aber ich bin in C# blutiger Anfänger und es gibt schon so einige Unterschiede....

Aber ich bin für Tipps weiterhin offen, danke.
 
Das funktioniert bei mir leider so nicht. Kann mir das sonst noch jemand kurz erklären, falls es bei ihm funktioniert.

Komme bei dem Problem leider echt alleine nicht weiter...

Danke!

Hat noch jemand eine Idee dazu?
 
Zuletzt bearbeitet von einem Moderator:
Beim neuen .NET 2.0 soll soweit ich weiß eine Methode Console.ReadKey implementiert werden, die genau ein Zeichen von der Tastatur liest und kein Enter erwartet.
Ist aber nur Halbwissen.
Du kansnt dir die pre Version Visual Studio 2005 C# light downloaden, da sollte das schon drin sein.
Hier gibts die Beta:
http://go.microsoft.com/fwlink/?LinkId=31591
 
Zuletzt bearbeitet:
Ist schon Krass wie man von der Zeicheneingabe zur Tastatur-Zeichen-Abfrage kommt.

[thread=179823]Hier[/thread] kriegt man keinen rauchenden Kopf wenn es um Zeichenüberprüfung geht. :p
(Das Validating Event nach jeder Zeicheneingabe auslösen.)

MFG cosmo
 

Neue Beiträge

Zurück