为什么这个顶级循环不起作用?

时间:2015-12-03 17:52:05

标签: c++ file-io

我想知道我在这里做错了什么。我试图得到一堆非重复的向量。有人可以告诉我我的拼写错误在哪里帮助我吗?我现在只是瞎了。它运行得很好,没有错误。但它没有给出任何输出。我真的很感激。我只是为自己建一个图书馆。

class vectGet {

    public:
    long long integral = 0;
    long long t = 14;

    string fname = "";

    long s_nop(long t);
} n;

long vectGet::s_nop(long t) {
    n.integral++;
    if (abs(round((n.t*1.618)*n.t-(n.integral+0.618))-1) <= 4294967296)
        return (abs(round((n.t*1.618)*n.t-(n.integral+0.618))-1));
    else
        return (abs(round(sqrt(n.t))+(round(sqrt(n.t))*round(sqrt(n.integral))+1)));
}

int main() {


    long bn=0;
    printf("How many Vectors should we make? ");
    cin >> bn;

    vector<long> deriv;


    if (bn <= 0) {
        printf("Invalid number of vectors, Exiting");
        return 1;
    }

    printf("\nOutput File: ");
    cin >> n.fname;

    if (n.fname=="") {
        printf("You must choose a filename to continue...");
        return 1;
    }

    ofstream out;
    out.open(n.fname.c_str(), std::ios::out);

    for (long i=1;i<=bn;i++) {
        n.t=n.s_nop(n.t);
        for (long j=0;j<deriv.size();j++) {
            if (n.t == deriv[j]) {
                i--;
                break;
            }
            deriv.push_back(n.t);
            printf(".");
        }
    }

    cout << "Writing to file.." << endl;
    for (long j=0;j<deriv.size();j++)
        out << deriv[j] << " ";

    out.close();
    return 0;   
}

2 个答案:

答案 0 :(得分:1)

j<deriv.size()为0,因此它永远不会运行内部循环,然后它不会将任何内容写入文件。

答案 1 :(得分:0)

这是缺少的代码。这将创建一个在要创建的限制下的任意数量的向量的列表。所有这些都可以按顺序复制,具有随机性。

    ofstream out;
    out.open(n.fname.c_str(), std::ios::out);

    for (long i=1;i<=bn;i++) {
        n.t=n.s_nop(n.t);
        deriv.push_back(n.t);
        for (long j=1;j<deriv.size()-1;j++) {
            if (n.t == deriv[j-1]) {
                i--;
                deriv.pop_back();
                break;
            }
        }
    }

    cout << "Writing to file.." << endl;
    for (long j=0;j<deriv.size();j++)
        out << deriv[j] << " ";

    out.close();
    return 0;   
}