Autor Beitrag
Sharpener
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: 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:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
//Aus der Klasse differenzialklasse .... Testmethode
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Do 19.04.12 16:43 
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: 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)
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 20.04.12 00:11 
äquivalent in C#

ausblenden 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

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
static void Main()
{
    char c;
    do
    {
        c = Console.ReadKey().KeyChar;
    } while (c != '~');
}
Sharpener Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
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
BeitragVerfasst: Fr 20.04.12 18:24 
Jetzt will das Programm funktionieren... Danke!
Diese Funktion:
ausblenden C#-Quelltext
1:
Console.ReadKey().KeyChar					

war mir bisjetzt umbekannt. Welche funktion hat das KeyChar am Ende genau?
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4701
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.