Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
#1

getch и TCHAR - C++

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

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

Всё это прекрасно делается через getch() и английский язык. Но, если переходить на русский при помощи setlocale, тут уже не помогает. Выход есть - использовать tchar, который воспринимает русский, но и тут проблема, для неё нету никаких tgetch(). Что делать в этом случае? Нужно считать символ без эхо, проверить и затем уже решить, нужно эхо или нет (при этом все в tchar). Либо можно ли обычным char'ом считывать русские символы?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2012, 20:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос getch и TCHAR (C++):

getch - C++
что озночает ввод синволов с помощю getch без буферизации

getch - C++
Недавно начал изучать си++. Что-то написал, не знаю по какой причине не компилирует. Прошу помочь. Думаю проблема где-то в 12 строке. ...

getch() - C++
с помощью функции getch() узнал код клавиш... int n; n = getch(); cout << n;

getch() - C++
Здравствуйте, форумчане! написал программу, которая должна переводить миллион символов 16-го кода в двоичный, но столкнулся с...

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 15:39 #16
Цитата Сообщение от nexen Посмотреть сообщение
то, что появляется в командной строке
- потому и написал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
system("chcp 1251");//Если компилятор новый поставь вместо этого setlocale(LC_ALL,"RUS");
, сейчас под рукой только MSVS 6.0 там setlocale не отрабатывает
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 15:44  [ТС] #17
-=ЮрА=-, получается то же самое, что и без setlocale :
вцфвфцв - корректно
printf("пувфпф") - не корректно
-=ЮрА=-
12.10.2012, 15:50
  #18

Не по теме:

nexen, ты меня запутал, какая кодировка сейчас в твоём проекте?Лучше покажи скрином ту вкладку настроек студии которую давал в посте 3

nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 16:00  [ТС] #19
-=ЮрА=-, пока что не могу скрин предоставить.
Сейчас стоит мультибайт.
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 16:20 #20
Цитата Сообщение от nexen Посмотреть сообщение
Сейчас стоит мультибайт
- тогда сетлокал должен рабоать, вечером сам проверю.

Цитата Сообщение от nexen Посмотреть сообщение
вцфвфцв - корректно
printf("пувфпф") - не корректно
- возможно не отрабатывает потмоу что printf это поток
stdio , надо смотреть. В любом случае перемешивание prinf и cin/cout неприемлимо, поєтому если пишем как плюсы - о принтф забываем если как Си, тогда о син/саут. Можно взглянуть на часть именно твоего кода отвечающего за ввод пароля?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 16:24  [ТС] #21
-=ЮрА=-, выше на 4 сообщения моя часть кода.
-=ЮрА=-
12.10.2012, 16:37
  #22

Не по теме:


Цитата Сообщение от 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 и ничего толкового сказать не смогу

nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 17:47  [ТС] #23
-=ЮрА=-, скажи, пожалуйста, а можно ли затирать символ и перемещать коретку в консоли? Хотелось бы сделать обработку BackSpace'а.
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 18:54 #24
Цитата Сообщение от nexen Посмотреть сообщение
-=ЮрА=-, скажи, пожалуйста, а можно ли затирать символ и перемещать коретку в консоли? Хотелось бы сделать обработку BackSpace'а.
SetConsoleCursorPosition вот тут пример Форматирование текста и изменение цвета текста в консоли
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 19:53  [ТС] #25
И всё-таки проблема с русским не решена ;( Без этого невозможно дальше работать.
p.s Как бы вопрос с записью и считыванием русских символов в файлы не встал..
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 21:50 #26
м.б. попробовать 4й фрэймворк установить? =) ну как вариант
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
13.10.2012, 07:04  [ТС] #27
MrGrig, стоит.
-=ЮрА=-
Заблокирован
Автор FAQ
13.10.2012, 10:31 #28
Цитата Сообщение от 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 Кб, 1 просмотров)
Тип файла: rar nexenPassw_VS6and9_proj.rar (5.5 Кб, 1 просмотров)
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
13.10.2012, 10:45  [ТС] #29
-=ЮрА=-, чуть позже гляну.
Я бы использовал либо CharToOem, либо MultiByteToUnicode (или как-то так) с TCHAR, если бы не
printf("привет"), где гораздо правильнее создать временный литерал, чем переменную, которую надо будет посылать в CharTo..
-=ЮрА=-
Заблокирован
Автор FAQ
13.10.2012, 12:11 #30
nexen, тогда напиши функцию преобразования:свой строковый литерал замени на контейнер std::string и делай переприсваивание внутри твоей функции сначала из контейнера во временный массив по которому проедит CharToOem,а затем из масива опять в контейнер,а сам временный массив удали
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.10.2012, 12:11
Привет! Вот еще темы с ответами:

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

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

Вывод TCHAR - C++
Как я понял, наиболее лучшее решение для работы со строками с возможностью &quot;быстрой&quot; перекомпиляции с поддержкой unicode и без -...

аналог getch() - C++
Ребят getch меня не устраивает следующим: когда окно теряет фокус он не работает. как выйти из ситуации?


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.10.2012, 12:11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru