Обнуление переменной
Всем здравствуйте!
Возник вопрос: как обнулить переменную, к примеру, в такой программе?
Под обнуление я понимаю так: у переменной было значение 2 а мы его стираем, и у переменной не остаётся значения.
Обнуление переменной в событии таймера
Помогите пожалуйста с реализацией. У меня есть таймер system.windows.forms.timer, у него есть.
Надо вывести название переменной, тип данных переменной, значение переменной
у нас есть переменная int variable = 0; Надо вывести название переменной, тип данных переменной.
Обнуление массива
У меня массив размерность которого 112. Как мне обнулить его одним кодом в конце цикла.
Обнуление DateTimePicker
Здравствуйте. Подскажите, как обнулить DateTimePicker, т. е. чтобы поле ввода оставалось пустым по.
Как обнулить переменную c
Да, случай очень тяжёлый.
Не говоря уже о жутко отформатированном коде и куче глобальных переменных, отследить изменение которых в такой каше очень тяжело. Ну скажите, зачем Вам тогда нуден параметр int в каждой функйии? xD ппц
1) Почему все координаты целые? Даже если у Вас квадраты только с вершинами в узлах целочисленной решётки, при вычислении центра вектора может получиться дробное число, далее следует округление до целого и центры векроров могут начать "совпадать" даже если на самом деле это не так.
Решение: используем данные с плавающей точкой, напр. float
2) "Введите кол-во точек". А я введу сто-тыщ-миллионов. Результат — floating point exception в лучшем случае. Где-то после введения 100й координаты ))
Решение: юзаем динам. выделение памяти или ставим проверку n < [размер массива]
3) Не будем влезать в алгоритм, но обратите внимание, например, что Ваши функции никак не используют параметры, им передаваемые. Это вообще нехорошо, так как вы явно пытаетесь, чтоб они использовали нужные вам (см. вызов функции) А берут они значения глоб. переменных, которые там явно не те, которые Вы ожидаете. Например.
Функция int razm(int) на момент своего завершения делает переменную i равной n — 1. Соотв. далее Ваши функции работают не с теми элементами, тк вы везде используете эту i, но забываете, что изменили её. А самый внешний цикл for (который в main внутри while) заканчивается сразу, тк i+1 уже не меньше n. Переменная i не локальная переменная в функции, а глобальная. И она во фсех функциях одна и та же.
Решение: создаём отдельную переменную для циклов "прогона индекса" (если вы хотите продолжать использовать глоб. переменные) или всё же объявляем в каждой функции свою локальную. Лучше вообще индексы внешнего цикла передавать как параметры.
4) Так же функции seredx и seredy на каждом проходе цикла будут возвращать один и тот же результат. Зачем тогда проверка на их равенство? *ехидно улыбается* Вы в этом сомневаетесь?
Решение: см. выше. Используем параметры функции.
Вобщем, подводя итог, скажу, что вам надо почитать книгу по C++, по возможности хорошую и вдумчиво. А так же, в особенности, раздел "функции" этой книги. Обратите внимание на листинги программ. В частности как передаются параметры, и много ли в этих программах глобальных переменных. Да и на общий стиль и оформление. Пригодится.
Если уж будет очень много проблемм с прогой, за пару wmz возьмусь Вам помочь
Как сбросить все переменные в C ++?
Кажется, мой код работает без проблем,
но наш профессор предупредил нас, что эта задача может потребовать
сброс переменных для повторного запуска после первого запуска.
Проблема в том, что я понятия не имею, как сбросить переменные и
Я предполагаю, что это становится необходимым с более сложным кодом. Помогите?
Это погодное задание в основном «спросить пользователя, какой это месяц,
затем запросите минимальную температуру, максимальную температуру. & количество осадков за каждый день этого месяца,
затем выведите среднемесячные значения и общее количество осадков.
РЕДАКТИРОВАТЬ:
Я получаю некоторые отзывы об отсутствии инициализации (я предполагаю, что это означает определение переменных). Я пытался этого не делать. Мой проф. попросил нас «использовать как можно больше const и« жестко закодированные »переменные минимально.
Я не смог найти здесь никакого использования const, поэтому я компенсировал это минимальной «жесткой записью», надеюсь, он говорил об инициализации.
Решение
Ваш код почти правильный.
Переменные будут удалены и перераспределены, потому что они находятся внутри внутренней области видимости.
Что вы ошиблись, так это то, что вы их не инициализируете. Когда вы объявляете примитивный тип, как int вы просто получаете следующие 4 байта в стеке, так что он будет содержать все, что там есть.
Это обычно плохо, потому что иногда вы предполагаете, что оно будет равно 0. Поэтому, чтобы исправить ваш код, просто убедитесь, что вы инициализируете все переменные явно (присвойте им 0).
Другие решения
Вы уже сбрасываете переменные для вас благодаря семантике значений в C ++. В вашем цикле while у вас есть
Когда вы достигнете конца цикла while ( > ) все эти переменные выйдут из области видимости. Затем, когда вы снова запустите цикл, они будут воссозданы и снова вернутся к своим начальным значениям.
Ты используешь mmNedbor , maxTemp а также minTemp в вашем цикле for, прежде чем инициализировать их, который неопределенное поведение поэтому вы должны установить для них начальное значение по умолчанию.
Это означает, что любая переменная, которую вы используете внутри цикла, которая зависит от того, инициализируется ли она определенным значением, должна быть инициализирована в начале цикла.
В вашем случае вы объявляете все свои соответствующие переменные внутри цикла, но не присваиваете им начальные значения. Если вы попытаетесь прочитать любое из этих неинициализированных значений перед записью в них, они будут содержать неизвестные данные. Особенно, minTemp , maxTemp , а также mmNedbor читаются без инициализации. Поэтому убедитесь, что все эти переменные имеют начальное значение.
Просто установите все переменные, которые вы используете в вашем цикле, на 0 или что-то в начале цикла, как вы делали с переменными minTempAdd и mmNedborAdd.
Как примечание, ваш код трудно читать, поэтому я бы порекомендовал вам потратить некоторое время на его рефакторинг.
How to reset static variables within a function
Is there a way to reset variables declared as static within a function? The goal is to make sure that the function is not called with lingering values from an unrelated call. For example, I have a function opearting on columns of a matrix.
The function is called n times, once for each column. Is this a proper way of «re-setting» the static variable? Are there other general fool-proof ways of resetting static variables? For example, I want to make sure that if the call is made with a new matrix with possibly different dimensions then the vector v is resized and zeroed etc. It seems the easiest way may be to call the function with a NULL pointer:
5 Answers 5
Use an idempotent initializer function and global variables instead.
If your initializer is really idempotent, you can call it again to reset the variables.
If you need this to be called automagically, use __attribute__((constructor)) (for GCC) like so:
However, you should note that if you need to do this, you should reconsider using in-function static variables and instead use passed-in fresh ones that are returned/written and passed to subsequent related calls.
I’d recommend turning it into a struct and writing a small helper function for managing the semantics of what you’re trying to do. It could return the buffer if the request is appropriate for its size, or create a new one on demand (and free the old one) if necessary.
One approach I’ve seen used when a C module was imported to C++ was to surround the whole module with a class wrapper, and replace all static variables inside functions with uniquely-named «global» varaibles outside the functions. I don’t know any good way to achieve a similar effect for projects involving multiple source files, though I’d like to know if one exists. I have some embedded system code in C, which I simulate by adding some C++ wrappers in VS2005. For example, I have I/O registers defined so that something like TX1CON = 0x5C; would translate into something like IOMAP(0x251).P = 0x5C; IOMAP is a property which would send «write 0x5C to address 0x251» to a hardware-simulation program. This approach works well, but I can’t do a clean reset. Any ideas?
An approach which can sometimes be helpful if one needs a «reset» method which can hit an unknown number of functions or modules is to have a global counter for how many times that reset method has been called, and then have each function or module include code like:
In some multi-threading contexts, if the initialization of the static variables may depend upon some global variables, one may wish to replace the «if» with a «while»; in such a case; memory barriers may also be needed in such a case, though the exact requirements would vary depending upon the operating environment.
Also, an alternative pattern that may be useful within embedded systems would be to have a modules_initialized global variable which gets set to 0 by the global reset method, and then have each module start with something like:
This would require that there be no more than 32 module ID’s, and would require that they be uniquely allocated somehow, but some systems can handle that pretty nicely. For example, a linker may allow one to define a «data section» from address 0-31 of an address space independent from any other; if each module declares a single-byte variable within that address space, the linker could generate the appropriate addresses for those variables.