В вашем случае проще использовать SetConsoleOutputCP и SetConsoleCP. Просто setlocale работает только с потоком вывода, а для пользователя, который будет вводить в переменную имя, не указана кодировка. То есть пользователь передает один байт из консоли со значением символа, который соответствует кодировке консоли (а это OEM-866, если не ошибаюсь). И получив значение от пользователя, консоль выплевывает его в представлении "локали", которую вы объявили.