Язык С. Присваивается мусор.
Пользователи, просматривающие топик: 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 <Windows.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
#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 >> ");
scanf ("%d", &in);
if (in < 1) return 1;
srand ((unsigned) time (NULL));
for (int i = 0; i < ARR_S; i++)
{
arr[i] = rand ();
if (arr[i] > in && mut)
{
acc = arr[i];
mut = 0;
}
if ((arr[i] > in) && (arr[i] < acc))
{
acc = arr[i];
count = i + 1; // в данном выражении count присваивается мусор
}
printf ("%3d| %6d\n", i + 1, arr[i]);
}
if (acc < in)
{
printf ("%4s\n", " 00");
return 0;
}
printf ("\n%3d %6d\n\n",
count,
acc);
return 0;
} // main ()
|
|
|
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
|
|
|
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). Причем, повторю, это происходит периодически.
|
|
|
RE: Язык С. Присваивается мусор. - 2012-01-22 06:31:22.916666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Отладчик так показывает потому что ты ещё не прошёл само присвоение ;)
|
|
|
|
|