Entwickler-Ecke
Basistechnologien - Probleme mit Console.Read(), in Verbindung mit WhileSchleife
Sharpener - Mi 18.04.12 20:44
Titel: Probleme mit Console.Read(), in Verbindung mit WhileSchleife
Hey,
ich arbeite zurzeit an einen Projekt , in dem ich Lösungstools für mathematische Probleme programmiere. Zurzeit bearbeite ich Ableitungen, die alte Methode die ich programmiert habe vor 2 Tagen weist jedoch ein paar Schwächen auf.
Die wollte ich mit einer "live"-Verarbeitung also Textverarbeitungsmäßig lösen, in C kenn ich eine gute Methode dafür, die wollte ich einfach mal potieren:
Resultat:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| public void NewAbleiten() { string testvor; string test =""; Console.Write("Die abzuleitende Funktion: "); while (true) { testvor = Convert.ToString(Console.Read()); if (testvor == " ") { break; } test += testvor; } Console.WriteLine(test); } |
Leider will das nicht so richtig funktionieren... Als Abbruch habe ich mal das Leerzeichen festgelegt (eigentlich wollte ich Enter"), aber so richtig will das nicht.
In C hat es soweit funktioniert, aber hier nicht, wo liegt das Problem?
Ralf Jansen - Mi 18.04.12 21:08
Console.Read liefert dir den Wert des eingelesen Zeichen. Also bei einem Leerzeichen z.B. 32. Und ein ToString liefert dir dann natürlich eben diesen Wert als String eben 32 und nicht einen Leerzeichen. Du solltest also nicht ToString verwenden sondern ToChar da ja eh nur ein einzelnes Zeichen eingelesen wird.
So wie es eben auch die
Doku [
http://msdn.microsoft.com/de-de/library/system.console.read.aspx] erklärt.
Sharpener - Do 19.04.12 16:43
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| public void NewAbleiten() { string testvor; string test =""; Console.Write("Die abzuleitende Funktion: "); while (true) { testvor = Convert.ToString(Convert.ToChar(Console.Read())); if (testvor == "") { break; } test += testvor; } Console.WriteLine(test); } |
Funktioniert aber immer noch nicht richtig
Ralf Jansen - Do 19.04.12 17:38
Wenn du wolltest das bei jedem Tastendruck ein return an deine Anwendung erfolgt damit du den Tastendruck sofort auswerten kannst wäre Console.ReadKey() zu verwenden. Console.Read() wird auch erst zurückkehren wenn ein Enter im Eingabebuffer ist und dann wird dir Console.Read() den Inhalt des Eingabepuffers zeichenweise liefern bis zum Enter.
Sharpener - Do 19.04.12 21:25
Ich habe Read() nun durch ReadKey() ersetzt und damit verbunden auch die Konvertierung. Als Abbruchzeichen hab ich testweite das p gesetzt. Trotzdem will es nicht funktionieren.
Nur als Vermerk, hier der äquivalent in C (ohne Speicherung der einzelnen Zeichen nachher im String und ausgabe)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| int main() { Char c; for(;;) { ch = getchar(); if ( ch == '~') { break; } } |
Dieser funktioniert... Morgen werde ich nochmal in meinen C# Code gucken
Ralf Jansen - Fr 20.04.12 00:11
äquivalent in C#
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| static void Main() { while (true) { char c = Console.ReadKey().KeyChar; if (c == '~') break; } } |
besser fände ich allerdings
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| static void Main() { char c; do { c = Console.ReadKey().KeyChar; } while (c != '~'); } |
Sharpener - Fr 20.04.12 18:24
Jetzt will das Programm funktionieren... Danke!
Diese Funktion:
C#-Quelltext
1:
| Console.ReadKey().KeyChar |
war mir bisjetzt umbekannt. Welche funktion hat das KeyChar am Ende genau?
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!