C++ interpreting/mapping getch() 输出
C++ interpreting/mapping getch() output
考虑这个程序:
#include <iostream>
#include <string>
int main(int argc, char* argv[]) {
std::string input;
std::cin >> input;
}
用户可以输入任何字符串(或单个字符),程序将按原样输出(upper/lower 大小写或符号,如 !@#$%^&* 取决于修饰符)。
所以,我的问题是:使用 <conio.h>
和 _getch()
获得相同结果的最佳方法是什么?将 _getch()
键码映射到相应符号(也取决于当前系统的区域设置)的最直接方法是什么?
我试过的是:
while (true) {
const int key = _getch();
const char translated = VkKeyScanA(key); // From <Windows.h>
std::cout << translated;
}
虽然这正确地映射了字母,但它们都是大写的并且没有映射任何符号(并且没有考虑修饰符)。例如:
当我输入 _ 或 -
时它输出 ╜
当我键入 [ 或 {
时它输出 █
将不胜感激跨平台解决方案。
以下代码有效:
// Code 1 (option 1)
while (true)
{
const int key = _getch(); // Get the user pressed key (int)
//const char translated = VkKeyScanA(key);
std::cout << char(key); // Convert int to char and then print it
}
// Code 2 (option 2)
while (true)
{
const char key = _getch(); // Get the user pressed key
//const char translated = VkKeyScanA(key);
std::cout << key; // Print the key
}
考虑这个程序:
#include <iostream>
#include <string>
int main(int argc, char* argv[]) {
std::string input;
std::cin >> input;
}
用户可以输入任何字符串(或单个字符),程序将按原样输出(upper/lower 大小写或符号,如 !@#$%^&* 取决于修饰符)。
所以,我的问题是:使用 <conio.h>
和 _getch()
获得相同结果的最佳方法是什么?将 _getch()
键码映射到相应符号(也取决于当前系统的区域设置)的最直接方法是什么?
我试过的是:
while (true) {
const int key = _getch();
const char translated = VkKeyScanA(key); // From <Windows.h>
std::cout << translated;
}
虽然这正确地映射了字母,但它们都是大写的并且没有映射任何符号(并且没有考虑修饰符)。例如:
当我输入 _ 或 -
时它输出 ╜
当我键入 [ 或 {
将不胜感激跨平台解决方案。
以下代码有效:
// Code 1 (option 1)
while (true)
{
const int key = _getch(); // Get the user pressed key (int)
//const char translated = VkKeyScanA(key);
std::cout << char(key); // Convert int to char and then print it
}
// Code 2 (option 2)
while (true)
{
const char key = _getch(); // Get the user pressed key
//const char translated = VkKeyScanA(key);
std::cout << key; // Print the key
}