Domanda

Sto provando la funzione qui sotto per ottenere un nome file consentendo al contempo "ESC", premere per tornare indietro

Ma per qualche motivo _Getch () restituisce sempre [1 '\ x1'] e ciò che viene stampato è una faccia smiley , anche per backspace (che è belloE tutto, ma assolutamente non quello che voglio accadere).

    .
  • Cosa sta succedendo qui?

altre intuizioni su come migliorare il codice sono più che benvenute!(Recentemente ho finito il mio primo anno al college quindi sono ancora abbastanza nuovo da programmare)

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;
}
.

È stato utile?

Soluzione

Leggi sulla precedenza dell'operatore qui: http://en.cppreference.com/w/ CPP / Lingua / Operatore_precedenza

uno dei problemi è nella linea

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

Poiché != ha una precedenza più elevata rispetto all'operatore di assegnazione

Che cosa stai facendo in realtà è:

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

e quindi ottenendo il risultato dell'espressione anziché il personaggio che volevi (che è la conversione integrale bool-> definita nel carattere §4.7 / 4 come 0 o 1) Inoltre: stai restituendo un riferimento a una variabile locale. Assicurati di restituire una copia di valore o qualcosa che non cade fuori dallo scopo.

Infine: _getch() restituisce il carattere Leggi dalla console, non è possibile "intercettare" gli accordi speciali speciali (ad es. Ctrl-D o ESC). Leggi di più qui: http://msdn.microsoft.com/it-it/library /078sfkak.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top