Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.74/27: Рейтинг темы: голосов - 27, средняя оценка - 4.74
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335

getch и TCHAR

11.10.2012, 20:44. Показов 6445. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Встала следующая задача :
1) Недопустить ввод кол-ва символов > 10
2) Заменить все символы на * (пароль)

Всё это прекрасно делается через getch() и английский язык. Но, если переходить на русский при помощи setlocale, тут уже не помогает. Выход есть - использовать tchar, который воспринимает русский, но и тут проблема, для неё нету никаких tgetch(). Что делать в этом случае? Нужно считать символ без эхо, проверить и затем уже решить, нужно эхо или нет (при этом все в tchar). Либо можно ли обычным char'ом считывать русские символы?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.10.2012, 20:44
Ответы с готовыми решениями:

Аналог getch или русские буквы в getch
Здравствуйте, уважаемые господа. Существуют ли какие-нибудь аналоги getch () и _getch, которые не требуют ввода какого-либо другого...

TCHAR
Добрый день, скажите пожалуйста, как преобразовать строку char в TCHAR, к примеру, у меня есть char *path = new char; ...

Сравнить TCHAR
Следующий код все время возвращает true, даже если переменные не равны. pob1, pob2 и pob3 тоже TCHAR. Пробовал wcscmp, тоже ничего не...

33
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 16:24  [ТС]
Студворк — интернет-сервис помощи студентам
-=ЮрА=-, выше на 4 сообщения моя часть кода.
0
12.10.2012, 16:37

Не по теме:


Цитата Сообщение от nexen Посмотреть сообщение
-=ЮрА=-, выше на 4 сообщения моя часть кода.
- Увидел
C++
1
2
3
4
5
6
while((simbol = getch()) != '\r')
    {
        login[i] = simbol;
        std::cout << simbol; 
            ++i;
    }
Хорошо посмотрим твой код с руссификацией чисто для плюсов (cin/cout) и чисто для Си(scanf/printf) пока под рукой нет MSVS 2008 и ничего толкового сказать не смогу

1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 17:47  [ТС]
-=ЮрА=-, скажи, пожалуйста, а можно ли затирать символ и перемещать коретку в консоли? Хотелось бы сделать обработку BackSpace'а.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
12.10.2012, 18:54
Цитата Сообщение от nexen Посмотреть сообщение
-=ЮрА=-, скажи, пожалуйста, а можно ли затирать символ и перемещать коретку в консоли? Хотелось бы сделать обработку BackSpace'а.
SetConsoleCursorPosition вот тут пример Форматирование текста и изменение цвета текста в консоли
2
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 19:53  [ТС]
И всё-таки проблема с русским не решена ;( Без этого невозможно дальше работать.
p.s Как бы вопрос с записью и считыванием русских символов в файлы не встал..
0
178 / 161 / 38
Регистрация: 08.10.2012
Сообщений: 423
12.10.2012, 21:50
м.б. попробовать 4й фрэймворк установить? =) ну как вариант
0
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
13.10.2012, 07:04  [ТС]
MrGrig, стоит.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.10.2012, 10:31
Цитата Сообщение от nexen Посмотреть сообщение
И всё-таки проблема с русским не решена ;( Без этого невозможно дальше работать.
вот так можно по быстрому пофиксить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <stdlib.h>
 
int main()
{
    char passw[12] = {0};//Будет хранить пароль
    system("chcp 866");
    printf("Enter password(less than 12 chars): ");
    for(int i = 0; i < 12; i++)
    {
        if((passw[i] = getch()) == '\r')
            break;
        else
            printf("*");
    }
    printf("\nYour input : %s\n",passw);//Понятное дело эту строку не надо печатать
    system("pause");
    return 0;
}
А вообще рекомендую не использовать ниsetlocal ни system("chcp xxx") а использовать CharToOem
Миниатюры
getch и TCHAR  
Вложения
Тип файла: rar nexenPassw.exe.rar (28.3 Кб, 2 просмотров)
Тип файла: rar nexenPassw_VS6and9_proj.rar (5.5 Кб, 2 просмотров)
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
13.10.2012, 10:45  [ТС]
-=ЮрА=-, чуть позже гляну.
Я бы использовал либо CharToOem, либо MultiByteToUnicode (или как-то так) с TCHAR, если бы не
printf("привет"), где гораздо правильнее создать временный литерал, чем переменную, которую надо будет посылать в CharTo..
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
13.10.2012, 12:11
nexen, тогда напиши функцию преобразования:свой строковый литерал замени на контейнер std::string и делай переприсваивание внутри твоей функции сначала из контейнера во временный массив по которому проедит CharToOem,а затем из масива опять в контейнер,а сам временный массив удали
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
13.10.2012, 14:08  [ТС]
-=ЮрА=-, и опять. 866 не помогает. То же самое, что без setlocale - ввод работает, printf("окей") нет. Это и при мультибайте в настройках, и при юникоде >_<
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
14.10.2012, 00:05
nexen, не слушаешь меня, ещё раз цитирую
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
nexen, тогда напиши функцию преобразования:свой строковый литерал замени на контейнер std::string и делай переприсваивание внутри твоей функции сначала из контейнера во временный массив по которому проедит CharToOem,а затем из масива опять в контейнер,а сам временный массив удали
Хорошо с кодом ниже думаю будет понятно о чём говорил

Не по теме:

(уточнение : в проекте нет std::string т.к я понял проект идёт как Сишный)


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <conio.h>
#include <locale.h>
#include <windows.h>
 
char * Rus(char * sMsg);
 
int main()
{
    char passw[12] = {0};//Áóäåò õðàíèòü ïàðîëü
    char szMsg[256]= {0};
    printf(Rus(strcpy(szMsg,"Ââåäèòå ïàðîëü êîðî÷å 12 ñèìâîëîâ: ")));
    for(int i = 0; i < 12; i++)
    {
        if((passw[i] = getch()) == '\r')
            break;
        else
            printf("*");
    }
    printf(Rus(strcpy(szMsg,"\nÂàø ââîä : ")));
    printf("%s\n",passw);//Ïîíÿòíîå äåëî ýòó ñòðîêó íå íàäî ïå÷àòàòü
    system("pause");
    return 0;
}
 
char * Rus(char * szMsg)
{
    char * szBuf = (char *)malloc(strlen(szMsg) + 1);
    if(CharToOem(szMsg, szBuf))
        strcpy(szMsg, szBuf);
    free((void *)szBuf);
    return szMsg;
}
Проект доджен идти НЕ как юникодный
Миниатюры
getch и TCHAR  
1
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
14.10.2012, 10:26  [ТС]
-=ЮрА=-, да нет, почему же, я слушал тебя. То ли я забыл отписаться, что не хотелось бы использовать такой подход, то ли ты не увидел.
В конечном счете его и использую уже. Однако проект Unicode и всё работает (как и в мультибайте).. С чего бы это? О_о

p.s Правда я использую облегченную конструкцию вида :
C++
1
printf(Rus("it's okey to be гей"));
, где
C++
1
2
3
4
5
char* Rus(const char *text)
{
    CharToOemA(text, buffer);
    return buffer; 
}
, а buffer определен глобально.
0
14.10.2012, 10:54

Не по теме:

nexen,

Цитата Сообщение от nexen Посмотреть сообщение
а buffer определен глобально.
ну так да тоже можно, просто я привык к модульности потому дал код с malloc и free. От себя добавлю считаю, что лучше всего функцию Rus строить на контейнерах типа std::string или более продвинутом классе CString

Цитата Сообщение от nexen Посмотреть сообщение
Однако проект Unicode и всё работает (как и в мультибайте).. С чего бы это? О_о
- что такое юникод - символ выводится из двух байтов инфы, что такое узкая кодировка из двух байтов выводится 2 символа по байту, т.е для латиницы побарабану а для кириллицы не замечаем, т.к. CharToOem уже отдаёт 1-байтное представление кириллического символа, немного запутанно, но понимаю этот момент именно так

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.10.2012, 10:54

Конвертация из TCHAR
Всем доброго времени суток. Такой вопрос: как конвертировать числовую величину в TCHAR и обратно ?? Если кому-то нужен код, для того...

TCHAR to int
Помогите, пожалуйста, исправить ошибку в программе. //программа выводит время песни в мс #include &quot;stdafx.h&quot; # include...

TCHAR Concatenation
Добрый вечер. Начел изучать C++ и тут сталкнулся с совсем простой на взгляд задачай, но некак немагу решить. Есть поинтер TCHAR...

Tchar-DELFI
Помогите пожалуйста!!!! На форму помещается Tcahr, edit и button. В edit вводятся числа от 2 до 5.Вывести их на Tchar.

TCHAR и string
Здраствуйте! Неполучается сконвертировать string в TCHAR. string myString; TCHAR myStr = myString; PS.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
34
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru