用C ++打印一个简单的数组

时间:2019-06-09 15:23:46

标签: c++

在使用C ++时,我是一个新手,但基本上我正在尝试使用以下代码打印数组:

#include <iostream>
#include <string>
#include <vector>
#include <ctime>
#include <numeric>
#include <math.h>
#include <iterator>
#include "rect_plate.h"
#include "numeric_constants.h"

using namespace std;
using std::vector;

// function prototypes
vector<double> generateRange(double a, double b, double c);

double lengthX;
double lengthY;
double resX;
double resY;

double Nx = lengthX / resX;
double Ny = lengthY / resY;

double deltaX = lengthX / Nx;
double deltaY = lengthY / Ny;


// function to calculate array
vector<double> generateRange(double a, double b, double c) {
    vector<double> array;
    while (a <= c) {
        array.push_back(a);
        a += b;         // could recode to better handle rounding errors
    }
    return array;
}

vector<double> xSpace = generateRange(deltaX / 2, deltaX, lengthX);
vector<double> ySpace = generateRange(deltaY / 2, deltaY, lengthY);

int main()
{
    // print array
    for (int i = 0; i < Nx - 1; i++)
    {
        cout << "Test" << xSpace[i] << endl;
    }
    system("pause");
    return 0;
}

但是当我运行可执行文件时,控制台中没有任何输出。 我得到的只是“按一个键继续”,然后退出控制台。

我正在将一些过程MATLAB转换为OO-C ++。我有一个带有对象的类设置,但是现在删除了那些对象以检查我的变量是否正确初始化。我知道在C#中,有一种方法可以遍历代码(F10-我正在使用VS2017),当您将鼠标悬停在给定变量上时,它会向您显示值,但没有发现与C ++类似的东西,所以我现在只是打印(或至少尝试打印)所有内容。

1 个答案:

答案 0 :(得分:3)

好的,让我们逐步进行

double lengthX;
double lengthY;
double resX;
double resY;

这些变量的值是多少? C ++规则说它们都是0.0(因为它们是未初始化的 globals ,而 globals 首先被零初始化)。

double Nx = lengthX / resX;
double Ny = lengthY / resY;

这些变量的值是多少?在上一节中,其0.0/0.0。根据几乎普遍使用的IEEE标准,即特殊的数字NaN,NaN代表“非数字”。

double deltaX = lengthX / Nx;
double deltaY = lengthY / Ny;

这些变量的值是多少? lengthX为零,但NxNaN。同样,根据IEEE标准,在NaN上进行的任何操作都会在另一个NaN中产生,因此这些变量也是NaN

因此,您最终将第一个参数用generateRange调用了NaN。在generateRange中,此表达式的意义是什么?记住aNaN

while (a <= c) {

IEEE标准规定,将NaN与任何事物进行比较始终是false。因此,您的while循环永远不会进入,什么也不会添加到您的数组中。

很明显,代码的一般问题是您从未给初始变量提供任何值。您应该为这些变量分配一些数字。然后,通常在generateRange函数 中设置完所有变量后(可能是用户输入)调用main