Autor |
Beitrag |
Sharpener
Beiträge: 24
Win 95, Win 98, Win 2000, Win XP, Win Vista, Win 7, Win 8, Mac OS X 10.4, Mac OS X 10.7, Mac OS X 10.8
C# (VS 2012), SQL, PHP, HTML&CSS,Java
|
Verfasst: Mi 18.04.12 20:44
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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 erklärt.
|
|
Sharpener
Beiträge: 24
Win 95, Win 98, Win 2000, Win XP, Win Vista, Win 7, Win 8, Mac OS X 10.4, Mac OS X 10.7, Mac OS X 10.8
C# (VS 2012), SQL, PHP, HTML&CSS,Java
|
Verfasst: 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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
Beiträge: 24
Win 95, Win 98, Win 2000, Win XP, Win Vista, Win 7, Win 8, Mac OS X 10.4, Mac OS X 10.7, Mac OS X 10.8
C# (VS 2012), SQL, PHP, HTML&CSS,Java
|
Verfasst: 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
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 20.04.12 00:11
|
|
Sharpener
Beiträge: 24
Win 95, Win 98, Win 2000, Win XP, Win Vista, Win 7, Win 8, Mac OS X 10.4, Mac OS X 10.7, Mac OS X 10.8
C# (VS 2012), SQL, PHP, HTML&CSS,Java
|
Verfasst: 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?
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Fr 20.04.12 18:36
Die ReadKey Methode liefert dir ein ConsoleKeyInfo Object mit Information zur gedrückten Taste z.B. auch ob CTRL, SHIFT etc. gerade auch gedrückt waren. KeyChar ist also nur eine Property der ConsoleKeyInfo Klasse und keine spezielle Funktion und liefert dir halt den Char der gedrückten Taste.
|
|
|