Как узнать код нажатой клавиши?
unsigned char c;
do{
c=cin.get();
cout<<c<<":"<<int(c)<<endl;
}while(c!=10); //пока не ввели Enter (код 10):
Но существует проблема с русскими буквами: в таблице ASCII (шрифт Terminal) они разбросаны, поэтому лучше собрать их в одну строку:
string s="абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
При этом кодировка текста программы не должна быть 16-битной, установите, например, windows-1251. Сменить кодировку можно в Блокноте.
При выводе сменить кодировку можно с помощью библиотеки locale.h:
setlocale(0,"rus");
Если нужен код русского символа, то он будет отрицательным, поэтому используйте сдвиг на 256 или преобразование типов unsigned int:
for (int i=0;i<s.size();i++)
cout<<s[i]<<":"<<int(s[i])+256<<endl;
Ввод из файла лучше осуществить построчно:
ifstream fin("input.txt");
string f;
while(getline(fin,f))
{
cout<<f.size()<<":"<<f<<endl;
}
Если всё же нужен посимвольный ввод, то есть проблема с русской буквой 'я'. Её код совпадает с кодом конца файла EOF (-1).
char q;
do
{
q=fin.get();
//не все буквы русские, если код отрицательный - делаем сдвиг:
cout<<q<<":"<<(int(q)+256)%256 << endl;
cout<<q<<":"<<(int(q)+((q<0)?256:0) << endl;
//если в тексте есть буква 'я' и это не конец файла,
//то нужно как то прочитать файл дальше:
if(q==EOF)
{
q=fin.get();
cout<<q<<":"<<int(q)<<endl;
}
}while(q!=EOF);
Вывод всех символов и их кодов в виде таблицы:
for (int i=0; i<256; i++)
{
cout.width(5);//ширина столбца 5 символов
//есть команды/клавиши с кодами:
//7 - подача звука
//8 - BackSpace
//9 -Tab
//10 - Enter
//13 - в начало строки
//27 - Esc
//32 - Space (пробел)
// их вывод лучше пропустить:
if (i==7 || i==8 || i==9 || i==10 || i==13 || i==27)
cout<<i<<":";
else
cout<<i<<":"<<char(i);
//вывод в 6 столбиков:
if (i%6==0) cout << endl;
}
unsigned char c;
do{
c=cin.get();
cout<<c<<":"<<int(c)<<endl;
}while(c!=10); //пока не ввели Enter (код 10):
Но существует проблема с русскими буквами: в таблице ASCII (шрифт Terminal) они разбросаны, поэтому лучше собрать их в одну строку:
string s="абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
При этом кодировка текста программы не должна быть 16-битной, установите, например, windows-1251. Сменить кодировку можно в Блокноте.
При выводе сменить кодировку можно с помощью библиотеки locale.h:
setlocale(0,"rus");
Если нужен код русского символа, то он будет отрицательным, поэтому используйте сдвиг на 256 или преобразование типов unsigned int:
for (int i=0;i<s.size();i++)
cout<<s[i]<<":"<<int(s[i])+256<<endl;
Ввод из файла лучше осуществить построчно:
ifstream fin("input.txt");
string f;
while(getline(fin,f))
{
cout<<f.size()<<":"<<f<<endl;
}
Если всё же нужен посимвольный ввод, то есть проблема с русской буквой 'я'. Её код совпадает с кодом конца файла EOF (-1).
char q;
do
{
q=fin.get();
//не все буквы русские, если код отрицательный - делаем сдвиг:
cout<<q<<":"<<(int(q)+256)%256 << endl;
cout<<q<<":"<<(int(q)+((q<0)?256:0) << endl;
//если в тексте есть буква 'я' и это не конец файла,
//то нужно как то прочитать файл дальше:
if(q==EOF)
{
q=fin.get();
cout<<q<<":"<<int(q)<<endl;
}
}while(q!=EOF);
Вывод всех символов и их кодов в виде таблицы:
for (int i=0; i<256; i++)
{
cout.width(5);//ширина столбца 5 символов
//есть команды/клавиши с кодами:
//7 - подача звука
//8 - BackSpace
//9 -Tab
//10 - Enter
//13 - в начало строки
//27 - Esc
//32 - Space (пробел)
// их вывод лучше пропустить:
if (i==7 || i==8 || i==9 || i==10 || i==13 || i==27)
cout<<i<<":";
else
cout<<i<<":"<<char(i);
//вывод в 6 столбиков:
if (i%6==0) cout << endl;
}
Комментариев нет:
Отправить комментарий