Frage

Ich versuche die Funktion unten, um einen Dateinamen zu erhalten, während ich die Taste „ESC“ drücke, um zurückzugehen

aber aus irgendeinem Grund _getch() gibt immer [1 '\x1'] zurück und was gedruckt wird, ist ein lächelndes Gesicht, sogar für BackSpace (was zwar nett ist, aber absolut nicht das ist, was ich möchte).

  • Was ist denn hier los?

Weitere Erkenntnisse zur Verbesserung des Codes sind herzlich willkommen!(Ich habe vor Kurzem mein erstes Studienjahr abgeschlossen, bin also noch ziemlich neu im Programmieren)

string& Get_Filename()
{
    char ch;
    string name;

    while (ch = _getch() != 'CR')
    {
        if (ch == 'ESC')
            throw RESTART;
        if (ch == 'BS')
        {
            name.pop_back();
            cout << 'BS';   // Also, will this correctly delete or will I need to
        }                   // << '\b' << ' ' << '\b'?
        else
        {
            name += ch;
            cout << ch;
        }
    }
    return name;
}
War es hilfreich?

Lösung

Lesen Sie hier mehr über die Operatorpriorität: http://en.cppreference.com/w/cpp/sprache/operator_precedence

Eines der Probleme liegt in der Leitung

while (ch = _getch() != 'CR')

seit != hat eine höhere Priorität als der Zuweisungsoperator

Was Sie eigentlich fragen, ist:

while( ch = (_getch() != 'CR') )

und erhalten so das Ergebnis des Ausdrucks anstelle des gewünschten Zeichens (das ist das Integrale Umwandlung bool->char definiert im Standard §4.7/4 als 0 oder 1)

Außerdem:Sie geben einen Verweis auf eine lokale Variable zurück.Stellen Sie sicher, dass Sie eine Nachwertkopie oder etwas zurückgeben, das nicht außerhalb des Gültigkeitsbereichs liegt.

Endlich: _getch() gibt das von der Konsole gelesene Zeichen zurück, Sie können keine speziellen Tastenakkorde (z. B.Strg-D oder Esc).Lesen Sie hier mehr: http://msdn.microsoft.com/it-it/library/078sfkak.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top