реклама на сайте
подробности

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


Местный
***

Группа: Свой
Сообщений: 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
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Jul 25 2009, 12:57
Сообщение #2


Нечётный пользователь.
******

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



С пробелами хуже... "192. 168. 0.1" указанным фрагментом кода воспринимается нормально.
Можно попробовать сначала втащить в промежуточную строку, заодно ограничив длину 15 символов и сделав допустимыми только символы цифр и точку
Код
char tmpstr[16];
sscanf( str, "%15[0-9.]s", tmpstr);
и дальше разбирать уже tmpstr
Но по мере наворачивания изобретательности пользователя и необходимости объяснять ему, где он неправ, разжёвывая до выделения красным мест во введённой строке, может оказаться проще действительно вручную разбирать.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Jul 25 2009, 19:56
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 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*/
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 28 2009, 00:02
Сообщение #4


кекс
******

Группа: Свой
Сообщений: 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 - придется перевводить все число наново. Спрашивается а нафига такой ителлект вводилки нужен?
Go to the top of the page
 
+Quote Post
Andrew2000
сообщение Jul 30 2009, 07:16
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 421
Регистрация: 25-12-04
Пользователь №: 1 675



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

Если мне память не изменяет, то у MaskEdit можно задать обработчик события неправильного ввода - т.е. можно выводить подсказки, поправлять ввод, ...
Go to the top of the page
 
+Quote Post
defunct
сообщение Jul 30 2009, 22:04
Сообщение #6


кекс
******

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



Цитата(Andrew2000 @ Jul 30 2009, 10:16) *
Если мне память не изменяет, то у MaskEdit можно задать обработчик события неправильного ввода - т.е. можно выводить подсказки, поправлять ввод, ...

Есть такое событие, но оно не делает MaskEdit пригодным к пользованию... Представьте, что на каждую нажатую Вами кнопку будет вываливаться какое-то окно с подсказкой или что еще хуже, вместо набранного Вами 300 молча появится 255.....

Чем меньше подсказок в процессе ввода - тем лучше.

А вот развернутую подсказку - объясняющую что не так после ввода давать нужно, при этом, ни в коем случае не удалять и не менять того, что пользователь ввел.
Пользователь, он хоть и дурак, но не полный, и свою опечатку уж как-то сам догадается исправить.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 03:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01391 секунд с 7
ELECTRONIX ©2004-2016