| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Минус творит что-то непонятное |
| Автор: Athlete 8.3.2006, 18:51 | ||
У меня вводится число k, при нажатии какого-либо знака (кнопки) происходит выполнение действия с числом q. За действие отвечает znak. Как только вводишь q отрицательным, то k становится равным -q. Ничего не пойму. Ему должно же быть всеравно.
|
| Автор: sergejzr 8.3.2006, 18:59 |
| А k то, чему равно? |
| Автор: Athlete 9.3.2006, 02:27 |
| k - положительное, разве это имеет значение? Добавлено @ 02:28 k - положительное, разве это имеет значение? |
| Автор: sergejzr 9.3.2006, 02:39 |
| мало кода привёл всмысле. Ошибка в другом месте. |
| Автор: Athlete 9.3.2006, 06:19 |
| Ну это главная часть.Расскажу по действиям: 1. В k вбивается первое число (глобальная переменная) 2. При нажатии кнопки действия, обнуляется Edit1. 3. Ввожу q (второе число). 4. Нажимаю знак равно (где расположен switch). Он, вбивает второе число (тоже с edit1) в q, распознает знак, выполняет действие |
| Автор: Lotrex 9.3.2006, 08:24 | ||||
Вот это:
не совсем правильно (или совсем не правильно Вот так лучше будет:
P.S.Athlete, судя по тому, что Вы говорите, у Вас где-то в другом месте программы все-таки есть глюк какой-то... Возможно, выход за границы динамического массива. А проблемы с atof и Edit лишь следствие. Вы выкладывайте сюда код своего калькулятора, не стесняйтесь! |
| Автор: Athlete 9.3.2006, 09:24 |
| У калькулятора 4 вкладки, поэтому все выкладывать не вижу смысла. Может быть лучше тогда по мылу кинуть проект? проще будет. |
| Автор: Romikgy 9.3.2006, 11:31 |
| Имхо лучше юзать StrToInt & StrToFloat |
| Автор: Adil' 9.3.2006, 14:11 |
| q=atof(&(Edit1->Text[1])); совсем неправильно, впрочем, как и q=atof(Edit1->Text[1]->c_str()); - это даже не скомпилится Если уж хочется atof импользовать, то q=atof(Edit1->Text.c_str()); |
| Автор: Lotrex 9.3.2006, 15:02 | ||||||
Да, верно, тут я поторопился и лажанулся..
А чем лучше? Тем что исключения выбрасывают? Я их поэтому и не использую
А сколько места проект занимает? Можно только *.cpp файлы послать. (Да их и тут можно выложить, я думаю.) |
| Автор: sergejzr 9.3.2006, 15:04 |
| Досьтаточно будет кода всей функции в которой эти 9 строк находятся. что ты в первом ссобщении привёл. |
| Автор: Lotrex 10.3.2006, 10:55 | ||
Я думаю, что нет, потому что ежели разрушена куча, то последствия этого могут вылезти совсем не там, где произошло это разрушение. В сях на деле не работает принцип "разделяй и властвуй" |
| Автор: Lotrex 10.3.2006, 15:19 | ||||
Athlete, вот тут у Вас в том коде, что Вы прислали:
Эти переменные объявлены глобальными. Имхо, глобальные они тут нафиг не нужны. Я бы объявил вот так:
Тогда область видимости этих переменных будет - файл, в котором они объявлены, а не вся программа. На худой конец, их в приватную часть объявления класса можно засунуть. И потом, таким переменным надо бы имена давать более заметные - хотя бы подлиннее и с "верблюжими горбами" : ТакИхБудетЛучшеВидно К примеру, k переименовать в FirstValue, а q переименовать в SecondValue. Но это так, на будущее совет. И ставьте отступы, а то Ваш код читать - можно сломать и мозги и глаза. |
| Автор: Lotrex 13.3.2006, 10:03 |
| К сожалению, не смог откомпилить Ваш проект - у меня C++ Builder 5.0 стоит, 6-ым пока не пользуюсь Единственное, что могу присоветовать - поставьте во все обработчики событий бряки. Возможно, что при нажатии кнопки-арифм. действия (+, -, *, /) или кнопки-равенства, или при вводе числа помимо нужных обработчиков этих событий вызываются еще какие-то "левые", или нужные обработчики вызываются не один раз. |
| Автор: Athlete 13.3.2006, 12:38 |
| Перевод не столь важен был в этой теме. Но спс за поправление. В ближайшее время все советы попробую реализовать, времени сейчас просто не хватает. |