_getch возвращает смайлики

Я пытаюсь использовать функцию ниже, чтобы получить имя файла, в то же время нажимая клавишу «ESC» для возврата

но по какой-то причине _getch () всегда возвращает [1 ‘\ x1’] и то, что печатается, является улыбающееся лицо, даже для BackSpace (что приятно и все, но абсолютно не то, что я хочу, чтобы это произошло).

  • Что тут происходит?

Другие идеи о том, как улучшить код, приветствуются! (Я недавно закончил свой первый год в колледже, так что я все еще плохо знаком с программированием)

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

0

Решение

Читайте о приоритете операторов здесь: http://en.cppreference.com/w/cpp/language/operator_precedence

Одна из проблем в линии

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

поскольку != имеет более высокий приоритет, чем оператор присваивания

на самом деле вы спрашиваете:

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

и, таким образом, получить результат выражения вместо символа, который вы хотели (который является интегральное преобразование bool-> char, определенный в стандарте § 4.7 / 4 как 0 или 1)

Более того: вы возвращаете ссылку на локальную переменную. Не забудьте вернуть копию по значению или что-то, что не выходит за рамки.

В заключение: _getch() возвращает символ, прочитанный из консоли, вы не можете «перехватить» специальные клавишные аккорды (например, Ctrl-D или Esc). Узнайте больше здесь: http://msdn.microsoft.com/it-it/library/078sfkak.aspx

3

Другие решения


По вопросам рекламы [email protected]