_Getch restituisce facce di smiley
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;
}
. 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