|
Как правильно делается sscanf для TEdit->Text, C++Builder 6 |
|
|
|
Jul 23 2009, 12:08
|

Местный
  
Группа: Свой
Сообщений: 378
Регистрация: 10-09-07
Из: UKR/Voz
Пользователь №: 30 423

|
Изучаю работу в окнах под C++Builder 6, до этого писаль только консольные приложеня. Вопрос следующий, есть масив Код unsigned char IP[4]; потом на форме есть VCL компонент типа TEdit * EditIP, в поле которого пишется ИП адрес в таком виде - 192.168.0.1 собственно в консольном приложении я делал так Код scanf("%d.%d.%d.%d", &IP_server[0], &IP_server[1], &IP_server[2], &IP_server[3]); А как такое делается в Builder ? подскажите так не работает Код sscanf(&IP[0],"%d.%d.%d.%d", Edit_IP->Text); тоесть когда вывожу отладочную информацию то масив IP[] содержит одни нули Код Memo1->Lines->Add(d_str.sprintf("IP %d.%d.%d.%d", IP[0],IP[1],IP[2],IP[3]) ); для проверки Код Memo1->Lines->Add(Edit_Login->Text); то ип переносится нормально подскажите что неправильно ?
Сообщение отредактировал west329_ - Jul 23 2009, 12:45
|
|
|
|
|
 |
Ответов
|
Jul 25 2009, 12:57
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
С пробелами хуже... "192. 168. 0.1" указанным фрагментом кода воспринимается нормально. Можно попробовать сначала втащить в промежуточную строку, заодно ограничив длину 15 символов и сделав допустимыми только символы цифр и точку Код char tmpstr[16]; sscanf( str, "%15[0-9.]s", tmpstr); и дальше разбирать уже tmpstr Но по мере наворачивания изобретательности пользователя и необходимости объяснять ему, где он неправ, разжёвывая до выделения красным мест во введённой строке, может оказаться проще действительно вручную разбирать.
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
Jul 25 2009, 19:56
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
счас уже самолет получится... вопрос был про C++Builder - так почему не воспользоваться его средствами? есть-же не только Edit, но и "MaskEdit" - не помню точно как называется - можно сразу задать допустимый для ввода шаблон. Или что-то типа такого (давно с C++Builder слез): Код TStringList* Strings = new TStringList(); Strings->CommaText = Edit->Text; /*->CommaText ждет ',' - т.е. нужно задать разделителем точку*/ if(Strings->Count==4) { /*разбор Strings, возможно, через StrToInt() или ->AsInteger*/
|
|
|
|
|
Jul 28 2009, 00:02
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Andrew2000 @ Jul 25 2009, 22:56)  есть-же не только Edit, но и "MaskEdit" - не помню точно как называется - можно сразу задать допустимый для ввода шаблон. Защита от дурака это хорошо, но пользователь - всегда прав. Поэтому защиту от дурака надо делать после того как пользователь ввел все что хотел и нажал "ОК", а не до. В MaskEdit же эта защита сделана "до". В результате чего, MaskEdit - это неюзабельная вещь. Поди разбери что он (этот MaskEdit) от тебя хочет, и почему проглатывает символы. Кнопки давишь, а ничего не вводится. Фтопку. Если программа не дает пользователю ввести символы которые он хочет ввести, то место такой программе - в корзине. PS: Мелкософт тоже маладцы блин, при конфигурировании TCP/IP если ошибочно задатать octet IP адреса скажем не 30, а 300 - автоматически получим в поле ввода 255. И вместо того чтобы раз нажать del - придется перевводить все число наново. Спрашивается а нафига такой ителлект вводилки нужен?
|
|
|
|
|
Jul 30 2009, 07:16
|
Местный
  
Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675

|
Цитата(defunct @ Jul 28 2009, 04:02)  В MaskEdit же эта защита сделана "до". В результате чего, MaskEdit - это неюзабельная вещь. Если мне память не изменяет, то у MaskEdit можно задать обработчик события неправильного ввода - т.е. можно выводить подсказки, поправлять ввод, ...
|
|
|
|
|
Jul 30 2009, 22:04
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Andrew2000 @ Jul 30 2009, 10:16)  Если мне память не изменяет, то у MaskEdit можно задать обработчик события неправильного ввода - т.е. можно выводить подсказки, поправлять ввод, ... Есть такое событие, но оно не делает MaskEdit пригодным к пользованию... Представьте, что на каждую нажатую Вами кнопку будет вываливаться какое-то окно с подсказкой или что еще хуже, вместо набранного Вами 300 молча появится 255..... Чем меньше подсказок в процессе ввода - тем лучше. А вот развернутую подсказку - объясняющую что не так после ввода давать нужно, при этом, ни в коем случае не удалять и не менять того, что пользователь ввел. Пользователь, он хоть и дурак, но не полный, и свою опечатку уж как-то сам догадается исправить.
|
|
|
|
Сообщений в этой теме
west329_ Как правильно делается sscanf для TEdit->Text Jul 23 2009, 12:08 andrew_b Цитата(west329_ @ Jul 23 2009, 16:08) так... Jul 23 2009, 13:30 Xenia Кодsscanf(Edit_IP->Text.c_str(), ... Jul 23 2009, 13:42 iosifk Цитата(west329_ @ Jul 23 2009, 16:08) Воп... Jul 24 2009, 04:56 ReAl Мне другое интересно - как это по формату %d вводи... Jul 24 2009, 09:07 Xenia Цитата(ReAl @ Jul 24 2009, 12:07) Мне дру... Jul 24 2009, 09:31 SSerge Нельзя недооценивать пользователя. Он запросто мож... Jul 24 2009, 11:21 mdmitry Цитата(SSerge @ Jul 24 2009, 15:21) Ещё л... Jul 24 2009, 11:48 ReAl Цитата(SSerge @ Jul 24 2009, 14:21) Для р... Jul 24 2009, 21:37  west329_ Цитата(Andrew2000 @ Jul 25 2009, 22:56) И... Jul 27 2009, 18:27   Andrew2000 Qt
http://www.qtsoftware.com/ Jul 27 2009, 21:13     XVR Цитата(defunct @ Jul 31 2009, 02:04) Чем ... Jul 31 2009, 06:42
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|