(c ++)代码中一个非常令人讨厌的问题

时间:2017-11-01 03:58:16

标签: c++

我在代码中定义了一个变量:

double R0;

当我将变量设置为小于0.9时,代码不会运行而没有错误!我还在cout<<2;之后写了main(){,但程序甚至没有显示出来!我很困惑:(问题是什么?当我将R0改为0.9或大于它时,代码运行。这是我能提供的最小的例子:

#include <iostream>
#include <math.h>
#include <vector>
#include <functional>
#include <string>
#include <sstream>

using namespace std;
vector<double> getBoxCoords(int boxID, double L, double R0, int nbox)
    {
    vector<double> coords(4);
    int yID = ceil((double)(boxID+1)/nbox);
    int xID = fmod((boxID+1-(yID-1)*nbox), nbox);
    if(xID==0)
        xID = nbox;
    coords[0] = (xID-1) * R0; // minX
    coords[1] = (yID-1) * R0; // minY
    coords[2] = min(xID * R0, L); // maxX
    coords[3] = min(yID * R0, L); // maxY
    return coords;
    }


double PBC(double pos, double L)
    {
    if(fabs(pos) > L / 2.0)
        return L-fabs(pos);
    else
        return fabs(pos);
    }

int main()
{
std::cout << 2;
    int N=100;  
    double rho=4.0, v0=0.03, eta=0.2, R0=0.03;
    double L = pow(N/rho,0.5);
    int nbox = (int)ceil(L/R0);
    vector<vector<int>> box_neighbors;
    vector<int> indices;
    for(int i = 0; i < nbox * nbox; i++)  //NUMBER OF BOX
    {
        vector<double> ci = getBoxCoords(i, L, R0, nbox);
        indices.clear();
        for(int j = 0; j < nbox * nbox; j++)
        {
            vector<double> cj = getBoxCoords(j, L, R0, nbox);
            bool xflag=false,
                yflag=false;
            if (PBC(ci[0]-cj[0],L)<R0 || PBC(ci[0]-cj[2],L)<R0 || PBC(ci[2]-cj[0],L)<R0 || PBC(ci[2]-cj[2],L)<R0)
                xflag=true;
            if (PBC(ci[1]-cj[1],L)<R0 || PBC(ci[1]-cj[3],L)<R0 || PBC(ci[3]-cj[1],L)<R0 || PBC(ci[3]-cj[3],L)<R0)
                yflag=true;

            if(xflag && yflag)
                indices.push_back(j);
        }
        box_neighbors.push_back(indices);
    }

    return 0;
}

如何删除问题?任何人都可以提供可运行的答案吗?

1 个答案:

答案 0 :(得分:1)

首先,现在显示调试std::cout << 2;,因为您没有结束流,正确的方法是

std::cout << 2 << std::endl;

然后您将能够看到调试消息。

其次,你的程序运行,但是当R0很小时,需要花费太多时间才能完成。对于给定值,即0.03,循环的两个层将执行nbox * nbox27889,因此总共777796321