Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Язык С. Присваивается мусор.

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Язык С. Присваивается мусор.
Имя
Сообщение << Старые топики   Новые топики >>
Язык С. Присваивается мусор. - 2012-01-20 02:24:02.443333   
Zeps

Сообщений: 2
Оценки: 0
Присоединился: 2012-01-20 01:47:47.540000
Писал решение к задаче из сборника Абрамяна, ч.2, задача minmax 14. Сохраняя значение счетчика цикла во временной переменной, я получаю в ней просто мусор. Причем он в ней получается через раз, т.е. допустим ввожу значение 30000 - в переменной count сохраняется мусор, затем ввожу 20000 - все норм, затем ещё 20000 раза два - снова мусор и т.д.
Пробовал этот пример скомпилировать tcc - тот же результат. Меня начинает клинить.
Уважаемые форумчане, помогите, пожалуйста, добраться до сути из-за чего это происходит.
#include &lt;Windows.h&gt; #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; #define ARR_S 10 int main (void) { int arr[ARR_S]; int mut = 1; int in; int acc = 0; int count; printf ("%s ", "Input integer &gt;&gt; "); scanf ("%d", &in); if (in &lt; 1) return 1; srand ((unsigned) time (NULL)); for (int i = 0; i &lt; ARR_S; i++) { arr[i] = rand (); if (arr[i] &gt; in && mut) { acc = arr[i]; mut = 0; } if ((arr[i] &gt; in) && (arr[i] &lt; acc)) { acc = arr[i]; count = i + 1; // в данном выражении count присваивается мусор } printf ("%3d| %6d\n", i + 1, arr[i]); } if (acc &lt; in) { printf ("%4s\n", " 00"); return 0; } printf ("\n%3d %6d\n\n", count, acc); return 0; } // main ()
Post #: 1
RE: Язык С. Присваивается мусор. - 2012-01-20 12:23:22.800000   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
1) поставь точку останова на count и убедись, что твой блок if хоть раз выполняется.
2) инициализируй переменную count чем-нибудь

При 30 000 всё работает, вроде, хотя что ты тут пытаешься запрограммировать - непонятно: http://codepad.org/amFTxvz2
Post #: 2
RE: Язык С. Присваивается мусор. - 2012-01-21 12:56:52.410000   
Zeps

Сообщений: 2
Оценки: 0
Присоединился: 2012-01-20 01:47:47.540000
1) блок if выполняется, это очевидно
2) инициализировать count можно было бы и нулем, просто в данном случае, логика программы и так гарантирует её инициализацию перед выводом. Значение выражения i + 1 в неё просто периодически не попадает.
Когда я под отладчиком дохожу до данного места (count = i + 1;), то он показывает, что там (в переменной count) лежит мусор (допустим значение -829834329). Причем, повторю, это происходит периодически.
Post #: 3
RE: Язык С. Присваивается мусор. - 2012-01-22 06:31:22.916666   
_SaZ_

Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
Отладчик так показывает потому что ты ещё не прошёл само присвоение ;)
Post #: 4
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Язык С. Присваивается мусор.







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.