Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Путаница в полученном из EditBox'а массиве.


Автор: Игорь1024 13.8.2010, 15:59
В программе которую сейчас пишу в одной из форм нужно ввести время в формате ДД.ЧЧ.ММ.
Для этого создал ресурс .rc , в нём создал диалоговое окно.
В Main.cpp успешно запустил обработку окна при помощи DialogBox(...);
Для начала решил попробовать получить день месяца.
Код

HWND tar=GetDlgItem(hwnd, IDC_EDIT1);
int temp0,temp1,Day;
char Buffer[7];
...//здесь события на нажатие кнопки
Edit_GetText(tar,Buffer,7);
          temp0=atoi(&Buffer[0]);
          temp1=atoi(&Buffer[1]);
          Day=temp0*10+temp1;//здесь точка отсл.
...
 
Для начала тестировал переменные на корректность данных. temp0 не всегда корректно.
temp1 хранит корректное значение если за ней не следуют другие знаки.
Day вообще не получился "корректным".
Тестировал при помощи точек отслеживания(все переменные);
temp'ы при 1 проходе ==0;
Потом при введении нового значения появляется некой число (всегда разное), но при следующем нажатии значение корректно.
Если вводишь число большее длины буффера , то выводится полностью содержимое EditBox'а начиная с цифры temp'a.



Если вопрос глупый или непонятно обьяснил, то извините - спать сильно хочу и возможно поэтому голова не мыслит.

Автор: xvr 13.8.2010, 17:52
Цитата(Игорь1024 @  13.8.2010,  15:59 Найти цитируемый пост)
          temp0=atoi(&Buffer[0]);
          temp1=atoi(&Buffer[1]);
Это неправильно. atoi получает на вход строку, а не указатель на отдельно стоящий символ.
Сделай так:
Код

char* p;
int day=strtol(Buffer,&p,10);
int month=strtol(p+1,&p,10);
int year=strtol(p+1,NULL,10);
ну и неплохо было бы в промежутках между strtol проверить *p на '.'


Автор: Игорь1024 14.8.2010, 01:40
Спасибо за совет! Я , честно говоря, в стандартной бибилиотеке несилён. Сейчас с этой функцией разберусь и надеюсь что всё получиться.

Не совсем то, но тоже полезно. Выход нашёл - неудобный и некрасивый- в отдельные массивы извлекать дни, часы,минуты и потом приравнивать это к соотвествующим переменным при помощи atoi.

Автор: xvr 14.8.2010, 08:29
Цитата(Игорь1024 @  14.8.2010,  01:40 Найти цитируемый пост)
Не совсем то, но тоже полезно.
Почему 'не совсем то'? По моему так 'совсем то'

Цитата(Игорь1024 @  14.8.2010,  01:40 Найти цитируемый пост)
Выход нашёл - неудобный и некрасивый-
Это не выход, это удаление гланд автогеном через задницу  smile 
Чем вариант с strtol не устраивает?

Автор: Игорь1024 17.8.2010, 16:19
ступил!!! smile  smile 
млин, там даже по точке можно ориентироваться!!!!

Вот я идиот...




Извините меня за мой глупый комментарий с "не совсем то..."!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)