Использование массивов, хранение данных в массивах и вывод их

0

Я новичок в C++ и в настоящее время пишу программу, которая имитирует фиксированное количество частиц, перемещающихся в ящике (пока нет столкновения, это означает, что они должны иметь одинаковые координаты теоретически). Однако в настоящее время я испытываю проблемы с использованием массивов. Как я могу инициализировать, ссылаться, хранить данные и выводить их в этом случае?

#include <stdio.h>
#include <stdlib.h>
#include <algorithm>

int main(void) {
float dlvelox;
float dlveloy;
float lvelox[1000];
float lveloy[1000];
float xcord[1000];
float ycord[1000];
float length;
float breadth;
int id;
int stepcount;
int step = 0;

/* Obtaining velocity */
{
printf("Enter the initial h velocity of the ball:\n");
scanf("%f", &dlvelox);
printf("Enter the initial v velocity of the ball:\n");
scanf("%f", &dlveloy);
std::fill_n(lvelox, dlvelox, -1);
std::fill_n(lveloy, dlveloy, -1);
}

/* Initializing box */
{
printf("Enter the length of box:\n");
scanf("%f", &length);
printf("Enter the breadth of box:\n");
scanf("%f", &breadth);
}

/* Obtain number of steps */
{
printf("Enter the number of steps wanted:\n");
scanf("%d", &stepcount);
}

/* Initial console display */
{
printf("\n");
printf("xcord, ycord, step\n");
printf("\n");

}

/* Loop method */
while ( step < stepcount )

for(id = 0; id < 1000; id++)
{
lveloy[id] = lveloy[id] - 9.81;
xcord[id] = xcord[id] + lvelox[id];
ycord[id] = ycord[id] + lveloy[id];
printf("%f, %f, %d\n", xcord[id], ycord[id], step);

if ( ycord[id] < 0 )
{
lveloy[id] = (lveloy[id] * -1);
xcord[id] = xcord[id] + lvelox[id];
ycord[id] = ycord[id] + lveloy[id];
printf("%f, %f, %d\n", xcord[id], ycord[id], step);
}

if ( ycord[id] > breadth )
{
lveloy[id] = (lveloy[id] * -1);
xcord[id] = xcord[id] + lvelox[id];
ycord[id] = ycord[id] + lveloy[id];
printf("%f, %f, %d\n", xcord[id], ycord[id], step);
}

if ( xcord[id] < 0 )
{
lvelox[id] = (lvelox[id] * -1);
xcord[id] = xcord[id] + lvelox[id];
ycord[id] = ycord[id] + lveloy[id];
printf("%f, %f, %d\n", xcord[id], ycord[id], step);
}

if ( xcord[id] > length )
{
lvelox[id] = (lvelox[id] * -1);
xcord[id] = xcord[id] + lvelox[id];
ycord[id] = ycord[id] + lveloy[id];
printf("%f, %f, %d\n", xcord[id], ycord[id], step);
}

step = step + 1;

}

if ( step == stepcount )
{
return 0;
}

}
  • 1
    в чем ваша проблема? какую ошибку вы получаете?
  • 0
    Вместо того, чтобы выводить 1000 значений xcord и ycord за шаг, я получаю только 3. Они все случайные числа, которые не имеют смысла.
Показать ещё 6 комментариев
Теги:
arrays
output
storage

1 ответ

1

С этой строкой

std::fill_n(lvelox, dlvelox, -1);

вы инициализируете dlvelox количество записей в массиве lvelox.

Но тогда вы зацикливаете

for(id = 0; id < 1000; id++)

используя записи в массивах, которые не инициализированы. Неинициализированные записи в массивах содержат неопределенные значения и не могут использоваться, поскольку это приведет к неопределенному поведению.

  • 0
    Большое спасибо за ваш ответ! Могу ли я узнать, какие массивы не инициализированы? Хаха, прости, я новичок в программировании на С!
  • 0
    @WanDingYao Локальные переменные в C или C ++ не инициализируются автоматически.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню