Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Глюки на тригонометрии при углах в 90n градусов. 
:(
    Опции темы
Mal Hack
Дата 6.1.2006, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Цитата(BreakPointMAN @ 6.1.2006, 23:14 Найти цитируемый пост)

Нельзя, блин, так, блин, делать... блин... ибо "("%." + IntToStr( PrecComboBox -> ItemIndex ) + "f")" это временный объект... Нельзя взять его char*-представление, и потом использовать этот адрес для инициализации указателя... Временный объект будет разрушен после выполнения этой строки, и по указателю фиг знает что будет лежать, блин.

Сразу надо было говорить smile

Сделал так:
Код

 AnsiString PrecStr = "%." + IntToStr( PrecComboBox -> ItemIndex ) + "f";
 Prec = PrecStr.c_str();

PM ICQ   Вверх
Mal Hack
Дата 7.1.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Так, вроде бы со всем разобрался...
Но есть такой глюк.
Есть несколько вот таких функций, висящих на разных кнопках и изменяющих разные Edit'ы. (*)
Код

void __fastcall TForm2::ExpBtnClick(TObject *Sender)
{
 try
  {  ExpEditRes -> Text = AnsiString().sprintf( Prec, (double) Exp( StrToFloat( ExpEditPower -> Text ) ) );  }
 catch ( Exception& )
  {  Application -> MessageBox( "Слишком большая степень." , "Ошибка" , MB_OK );  }
}

Есть список, из 9 элементов, котоый дает уже знакомую точность. Вот у него идет обраюотка на OnChange.
Вот функция
Код

void __fastcall TForm2::PrecComboBoxChange(TObject *Sender)
{
 AnsiString PrecStr = "%0." + IntToStr( PrecComboBox -> ItemIndex ) + "f";
 Prec = PrecStr.c_str();
 Form2->Caption = Prec;

 AngleBtnClick( Sender );
 LogBtnClick( Sender );
 ExpBtnClick( Sender );
}

Как видно, она вызывает вот те самые функции (*)
Так вот, когда я выбираю, все значения в этих функциях изменяют значения при выводе на новую точность. Все это работает.
Но, вот если я выбрал точность, начиная с 4 ItemIndex или %0.3f, то если нажать на кнопку, все поля, которые должны пересчитаться - обнуляются. Why?
Внутри функций Prec используется только как:
Код
  LogEdit10 -> Text = AnsiString().sprintf( Prec, (double) Log10( x ) );

Т.е. Prec не ПЕРЕОПРЕДЕЛЯЕТСЯ в них.
PM ICQ   Вверх
_hunter
Дата 10.1.2006, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



странно. по коду граблей не видно... нужно отладчиком походить.

а что будет если так:
LogEdit10 -> Text = AnsiString().sprintf("%0.3f", (double) Log10( x ) );
написать?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Mal Hack
Дата 10.1.2006, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: нет
Всего: 261



Так все остается, как надо.
Странно, но Prec изменяет свое значение при клике на кнопки. Почему? Фиг знает, ведь она там не изменяется.

Я так чувствую, что где-то я очень глупо указатель использую.
Вот прикладываю исходник.

Это сообщение отредактировал(а) Mal Hack - 10.1.2006, 19:01

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  Unit2.cpp 10,54 Kb
PM ICQ   Вверх
teesync
Дата 27.7.2022, 05:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 36
Регистрация: 26.7.2022

Репутация: нет
Всего: нет




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1345 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.