Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.01.2016, 14:34   #1
MrTruth
 
Регистрация: 15.01.2016
Сообщений: 7
Вопрос Ввод/вывод из строчных массивов (C++ Builder XE8)

Здравствуйте, меня интересует событие при котором программа считывает нажатие клавиши.
Моя программа должна считывать нажатие клавиш во время ввода слова и по буквам вносить это слово в массив.
Код:
AnsiString word[100]; //  создаем строчный массив 
int id=0; // переменная для порядкового номера буквы в массиве

void __fastcall TForm1::FormShortCut(TWMKey &Msg, bool &Handled)
{
	if (Msg.CharCode==65) // нажатие клавиши "А" 
	{
		word[id]="A"; //записываем букву "А" в определенную ячейку      
		id++;  //порядковый номер для следующей буквы
	}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
	for (int i = 0; i < 100; i++)
	{
		Edit2->Text=Edit2->Text+word[i]; вывод элементов массива  
	}
}
Ввод
Клавиша была нажата 2 раза
переменная id должна была увеличится на 2
ввод.jpg
но функция инкремента была выполнена 2 раза т.е. при нажатии клавиши у меня заполнилось две ячейки вместо одной
вывод.jpg
это можно поправить дописав две строки
Код:
void __fastcall TForm1::FormShortCut(TWMKey &Msg, bool &Handled)
{
	if (Msg.CharCode==65)
	{
		word[id]="A"; //записываем букву "А" в определенную ячейку
		Edit1->Text=Edit1->Text+"A";
		Handled=true;
		id++; //порядковый номер для следующей буквы
	}
}
но это уже не то
1.jpg
2.jpg
Во первых почему программа выполняла функцию инкремента 2 раза?
Во вторых почему после добавления строки "Handled=true;" перестал работать ввод с клавиши "A" но ячейки в массиве стали заполнятся правильно?
MrTruth вне форума Ответить с цитированием
Старый 15.01.2016, 15:20   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

А нафига тебе событие OnShortCut?
Есть жэж OnKeyPress и OnKeyDown/...Up.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.01.2016, 17:23   #3
MrTruth
 
Регистрация: 15.01.2016
Сообщений: 7
По умолчанию

массив не заполняется вовсе
Код:
void __fastcall TForm1::FormKeyPress(TObject *Sender, System::WideChar &Key)
{
	if (Key==65)
	{
		word[id]="A";
		id++;
	}
}
или так
Код:
void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)

{
	if (Key==0x41)
	{
		word[id]="A";
		id++;
	}
}
что здесь не так?

Последний раз редактировалось MrTruth; 15.01.2016 в 17:30.
MrTruth вне форума Ответить с цитированием
Старый 15.01.2016, 18:08   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
что здесь не так?
всё так. поставь там брейкпойнт. если прога не тормознётся, то KeyPreview = true сделай
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.01.2016, 19:47   #5
MrTruth
 
Регистрация: 15.01.2016
Сообщений: 7
По умолчанию

Я еще ни разу не использовал брейкпоинты но догадываюсь что они могут остановить повторное выполнение инкремента (надеюсь на это).
MrTruth вне форума Ответить с цитированием
Старый 15.01.2016, 19:58   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Я еще ни разу не использовал брейкпоинты
Пора уже называть пипиську членом, перестать использовать глобальные переменные там, где без них можно обойтись, и начать пользоваться дебаггером!

kznm.jpg

Цитата:
но догадываюсь что они могут остановить повторное выполнение инкремента (надеюсь на это)
не надейся. нинада так. это не то, что ты думаешь, это гораздо круче.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 15.01.2016, 20:50   #7
MrTruth
 
Регистрация: 15.01.2016
Сообщений: 7
По умолчанию

3.jpg
ладно я так понял пора мне освоить ДЕБАГЕР БЛДЖАД!
MrTruth вне форума Ответить с цитированием
Старый 15.01.2016, 21:00   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
ладно я так понял пора мне освоить ДЕБАГЕР БЛДЖАД!
отож
kznm.jpg

147.png
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 15.01.2016 в 21:04.
min@y™ вне форума Ответить с цитированием
Старый 15.01.2016, 21:14   #9
MrTruth
 
Регистрация: 15.01.2016
Сообщений: 7
По умолчанию

6.png
7.png
MrTruth вне форума Ответить с цитированием
Старый 15.01.2016, 21:22   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Кстати
Цитата:
Моя программа должна считывать нажатие клавиш во время ввода слова и по буквам вносить это слово в массив.
А нахрена?
Чо за мегапрограмму ты пытаесся изобрАзить?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачку C++: бесформатный ввод/вывод, форматный ввод/вывод david1506 Visual C++ 2 21.10.2015 09:03
Проблемы с компилятором Builder С++ XE8 Dima-91 Помощь студентам 3 18.07.2015 15:21
Ввод\выввод двоичных массивов Artifex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 02.06.2011 19:41
Решение массивов на c++ Builder tumann3105 Помощь студентам 3 24.10.2010 17:21