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

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

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

getch и TCHAR - C++

11.10.2012, 20:44. Просмотров 2493. Ответов 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
Посмотрите здесь:

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

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

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

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

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

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

Не работает getch() - C++
не работает задержка по getchar() #include <iostream> #include <cstdlib> #include <time.h> #include <cstdio> #include...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 08:01     getch и TCHAR #2
x,y/*координата курсорa по х и у где в данный момент буква*/
for(int i=0;i<20;i++,x++){
a=tchar();
gotoxy(x,y);
}
//Вы вводите 20 символов нажатие каждого фиксируется в цикле и тут же заменяется на символ *. так же в цикл можно вставить какие либо действия с переменной а или же орканизовать в виде массива. Единственный минус этой системы (с ходу который могу назвать) это то что у неё нет защиты от дурака. (имеется ввиду что пользователь вдруг не начнет жать энтер при вводе.

Добавлено через 1 минуту
функция gotoxy(), по моему, содержится в библиотеке windows.h
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 12:12     getch и TCHAR #3
Цитата Сообщение от MrGrig Посмотреть сообщение
функция gotoxy(), по моему, содержится в библиотеке windows.h
- нет она не содержится это функция из БорландС graphics.h
Теперь на счёт проблемы :
Цитата Сообщение от nexen Посмотреть сообщение
Что делать в этом случае?
- всё решается переводом кодировки проекта из широкой в однобайтную (которая привычна глазу обывателя). Как это делать на скриншоте в этом посте
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 13:10  [ТС]     getch и TCHAR #4
MrGrig, что за функция "tchar()"? Не смог её найти.
И всё-таки, есть ли функция, забирающая юникод-символ из буфера без эхо? Не хочется такие ухищрения с gotoxy делать

Добавлено через 4 минуты
-=ЮрА=-, getch() по прежнему не ловит русские символы. Даже с мультибайтом.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 13:13     getch и TCHAR #5
Цитата Сообщение от nexen Посмотреть сообщение
MrGrig, что за функция "tchar()"? Не смог её найти.
И всё-таки, есть ли функция, забирающая юникод-символ из буфера без эхо? Не хочется такие ухищрения с gotoxy делать
я если честно в первый раз о ней слышу, просто предположил что вызов её идет именно такой как и гетч из
Цитата Сообщение от nexen Посмотреть сообщение
Выход есть - использовать tchar, который воспринимает русский
хотя я не помню чтобы у гетча были проблемы с восприятием русского алфавита, всегда в мэйне первым делом вставлял такую строчку
C++
1
setlocale(LC_ALL,".ACP");
или
C++
1
setlocale(LC_ALL,"Rus");
но скорее всего я ошибаюсь и это лишь даёт пользоваться корректным выводом в консоли
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 13:20  [ТС]     getch и TCHAR #6
MrGrig, setlocale стоит
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 13:22     getch и TCHAR #7
nexen, ну как я и считал я ошибся
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 13:24  [ТС]     getch и TCHAR #8
Основной цикл ввода :
C++
1
2
3
4
5
6
7
8
9
10
11
do
    {
        //scanf("%c", &simbol); // это я смотрел, правильно ли сканф считывает \ (неправильно считывает и он)
        simbol = _getch();
        if (i < STRING_SIZE-1 && simbol != (char)'\r\n')
        {
            login[i] = simbol;
            printf("%c", (char)simbol);
            ++i;
        }
    } while (simbol != (char)'\r\n');
где char simbol.
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 13:28     getch и TCHAR #9
* должно заменяться в реальном времени?
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 13:42  [ТС]     getch и TCHAR #10
Цитата Сообщение от MrGrig Посмотреть сообщение
* должно заменяться в реальном времени?
Да, в противном случае встает вопрос о том, как же сделать ограничение на кол-во символов при вводе, ибо scanf_s не спасает.
Ну а пароли всегда заменяются на * в реальном времени
MrGrig
176 / 159 / 2
Регистрация: 08.10.2012
Сообщений: 422
12.10.2012, 14:19     getch и TCHAR #11
я хз короче у меня на 7ке и без сетлокейт пашет=/ мож что не так задание понял

C++
1
2
3
4
5
6
7
8
9
char a1,a[100];
 int i;
 for(i=0;i<10;i++){
    a1=getch();
    a[i]=a1; //соответственно запись в масив для дальнейшей проверки на подлинность и тд и тп
    cout<<"*"; //вывод звездочек в реальном времени
 }
 a[i]='\0'; //ну это объяснять не надо
 cout<<endl<<a<<endl; //вывожу строку чтобы показать что все норм записалось
результат

[IMG]http://s017.***********/i441/1210/f6/2f3af4878834.png[/IMG]

Добавлено через 4 минуты
З.Ы. долго впоминал как чаровские масивы тут создаются были проблемы с присвоением сразу в массив, поэтому пользовался переменной дополнительно, но работает и без неё
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 14:56  [ТС]     getch и TCHAR #12
MrGrig, О_о.. У тебя мультибайт стоит?
У меня такой фокус не прокатывает D:

Добавлено через 30 минут
таки да, без setlocale символы отображаются верно, но тогда я не могу писать как-то так :
printf("Привет");
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 15:10     getch и TCHAR #13
nexen, делается всё элементарно без всяких гетчей и в рамках функций ввода/выода одобренных в стандарте(gecth же атавизм от дос и не входит в стандарт)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
#include <iostream>
using namespace std;
 
int main()
{
    string passw;//Áóäåò õðГ*Г*ГЁГІГј ГЇГ*ðîëü
    char smbl = 0;
    system("chcp 1251");//Если компилятор новый поставь вместо этого setlocale(LC_ALL,"RUS");
    cout<<"Enter password : ";
    while((smbl = getchar()) != '\n')
        passw += smbl;
    cout<<passw<<endl;
    system("pause");
    return 0;
}
Вводим последовательно псимволы для пароля, а после жмём Энтер.
Миниатюры
getch и TCHAR  
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 15:15     getch и TCHAR #14
А вот код для звёздочек при вводе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <string>
#include <conio.h>
#include <iostream>
using namespace std;
 
int main()
{
    string passw;//Будет хранить пароль
    char smbl = 0;
    system("chcp 1251");
    cout<<"Enter password : ";
    while((smbl = getch()) != '\r')
    {
        cout<<"*";
        passw += smbl;
    }
    cout<<"\nYour input : "<<passw<<endl;//Понятное дело єту строку не надо печатать
    system("pause");
    return 0;
}
Миниатюры
getch и TCHAR  
nexen
187 / 180 / 3
Регистрация: 27.01.2012
Сообщений: 1,335
12.10.2012, 15:32  [ТС]     getch и TCHAR #15
Попробовал и на мультибайте и на юникоде. printf/cout. Одно и то же. Русские символы при печати выводятся корректно без setlocale, но тогда вопрос в printf("введите"), а с setlocale, все нормально при printf("окей"), но не при вводе.

-=ЮрА=-,
программа :
C++
1
2
3
4
5
6
7
 while((simbol = getch()) != '\r')
    {
        login[i] = simbol;
            //printf("%c", simbol);
        std::cout << simbol;
            ++i;
    }
то, что появляется в командной строке
Изображения
 
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 15:39     getch и TCHAR #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  [ТС]     getch и TCHAR #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  [ТС]     getch и TCHAR #19
-=ЮрА=-, пока что не могу скрин предоставить.
Сейчас стоит мультибайт.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.10.2012, 16:20     getch и TCHAR
Еще ссылки по теме:

getch() error - C++
Привет всем, такое дело, не работает getch()! Вот, что пишет: C:\Users\AKHURS\Desktop\tetris_start.cpp:122: implicit declaration...

Функция getch() - C++
Здравствуйте! Проблема следующая: в программе для получения значений от пользователя я использовал функцию getch(), вызов этой функции в...

ошибка getch() - C++
программа с функцией getch() компилируется адекватно, но пр выполнении выскакивает такое окошко

Не работает getch() - C++
Здравствуйте, решил написать первую серьезную программу ,в данном случае змейку, не получается ввести нажатие клавиши с клавиатуры.После...

getch и коды - C++
здравствуйте господа програмисты!как сделать что бы при нажатии клавиши &quot;w&quot; выскакивало надпись привет народ,но только при нажатии именно...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
12.10.2012, 16:20     getch и TCHAR #20
Цитата Сообщение от nexen Посмотреть сообщение
Сейчас стоит мультибайт
- тогда сетлокал должен рабоать, вечером сам проверю.

Цитата Сообщение от nexen Посмотреть сообщение
вцфвфцв - корректно
printf("пувфпф") - не корректно
- возможно не отрабатывает потмоу что printf это поток
stdio , надо смотреть. В любом случае перемешивание prinf и cin/cout неприемлимо, поєтому если пишем как плюсы - о принтф забываем если как Си, тогда о син/саут. Можно взглянуть на часть именно твоего кода отвечающего за ввод пароля?
Yandex
Объявления
12.10.2012, 16:20     getch и TCHAR
Ответ Создать тему
Опции темы

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