在使用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 ++类似的东西,所以我现在只是打印(或至少尝试打印)所有内容。
答案 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
为零,但Nx
为NaN
。同样,根据IEEE标准,在NaN
上进行的任何操作都会在另一个NaN
中产生,因此这些变量也是NaN
。
因此,您最终将第一个参数用generateRange
调用了NaN
。在generateRange
中,此表达式的意义是什么?记住a
是NaN
。
while (a <= c) {
IEEE标准规定,将NaN
与任何事物进行比较始终是false
。因此,您的while循环永远不会进入,什么也不会添加到您的数组中。
很明显,代码的一般问题是您从未给初始变量提供任何值。您应该为这些变量分配一些数字。然后,通常在generateRange
函数 中设置完所有变量后(可能是用户输入)调用main
。