【问题标题】:Using arrays, storing data in arrays and outputting them使用数组,将数据存储在数组中并输出
【发布时间】:2013-12-25 19:12:36
【问题描述】:

我是 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;
}

}

【问题讨论】:

  • 您的具体问题是什么?你得到什么样的错误?
  • 不是每步输出 1000 个 xcord 和 ycord 值,而是只得到 3 个。它们都是没有意义的随机数。
  • 更重要的是,你的TAB 密钥坏了吗?
  • 虽然大部分代码是 C,但其中一些是 C++。您可能应该尝试只使用一种语言。
  • 英国已经完成了布朗运动

标签: c++ arrays output storage


【解决方案1】:

用这条线

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

你初始化dlveloxlvelox数组中的条目数。

然后你循环

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

使用数组中未初始化的条目。数组中未初始化的条目包含不确定的值,不能使用,因为这会导致未定义的行为

【讨论】:

  • 非常感谢您的回答!我可以知道哪些数组未初始化吗?哈哈,对不起,我是 C 编程新手!
  • @WanDingYao C 或 C++ 中没有自动初始化局部变量。
  • 使用“float xcord[1000] = {0};”将 xcord 和 ycord 的值初始化为 0 后,我仍然只得到 2 个粒子的 0 值:(
  • @WanDingYao 别忘了lveloylvelox 的其余部分。
猜你喜欢
  • 1970-01-01
  • 2014-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2017-09-20
  • 2016-12-08
  • 2011-05-03
相关资源
最近更新 更多