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

 
 
> Как правильно делается 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
Ответов
SSerge
сообщение Jul 24 2009, 11:21
Сообщение #2


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Нельзя недооценивать пользователя. Он запросто может ввести в это поле что угодно, вплоть до собственного имени, даты рождения или номера паспорта. Для разбора таких данных sscanf() уже мало пригодна, она больше для неинтерактивных данных, где есть уверенность что нужный формат соблюдается.
Нужно проконтролировать что числа находятся в диапазоне 0-255, что между ними действительно только одна точка, что чисел всего четыре, не больше и не меньше, и по любой ошибке выдать осмысленное сообщение.
Лучше разбирать строку по частям. Можно просто вручную считывать цифры и превращать их в число или применить функции типа atoi() или strtol(), потом проверить на '.', потом следующее число...

Ещё лучше сделать четыре отдельных поля ввода, по одному для каждого числа, проще будет и точек юзеру набирать не надо, они уже будут нарисованы на форме для ввода.


--------------------
Russia est omnis divisa in partes octo.
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
|- - mdmitry   Цитата(SSerge @ Jul 24 2009, 15:21) Ещё л...   Jul 24 2009, 11:48
|- - ReAl   Цитата(SSerge @ Jul 24 2009, 14:21) Для р...   Jul 24 2009, 21:37
- - ReAl   С пробелами хуже... "192. 168. 0.1" указ...   Jul 25 2009, 12:57
- - Andrew2000   счас уже самолет получится... вопрос был про C++Bu...   Jul 25 2009, 19:56
- - west329_   Цитата(Andrew2000 @ Jul 25 2009, 22:56) И...   Jul 27 2009, 18:27
|- - Andrew2000   Qt http://www.qtsoftware.com/   Jul 27 2009, 21:13
- - defunct   Цитата(Andrew2000 @ Jul 25 2009, 22:56) е...   Jul 28 2009, 00:02
- - Andrew2000   Цитата(defunct @ Jul 28 2009, 04:02) В Ma...   Jul 30 2009, 07:16
- - defunct   Цитата(Andrew2000 @ Jul 30 2009, 10:16) Е...   Jul 30 2009, 22:04
- - XVR   Цитата(defunct @ Jul 31 2009, 02:04) Чем ...   Jul 31 2009, 06:42


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

 


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


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