程序似乎跳过'if'语句

时间:2015-12-09 19:35:58

标签: c++ if-statement vector

我正在尝试创建一个程序,它将向量1('V1')中的3个不相等的值相乘,并在向量2('V2')中写入。我正在使用3'表示'循环和一个计算向量2的值的数字的整数。但程序会跳过'if'语句。

#include <vector>
#include<fstream>
#include<iostream>
#include <algorithm>

using namespace std;

void earase(vector<int> V2, unsigned int z){
    V2.erase(V2.begin() + z);
}

void main(){
unsigned int N;
unsigned int z = 0;
vector<int> V1;
vector<int> V2;
int input;
ifstream file1;
file1.open("input.txt");
file1 >> N;

for (unsigned int i = 0; i < N; i++){
    file1 >> input;
    V1.push_back(input);
}
file1.close();

for (unsigned int i = 0; i < V1.size(); i++){
    for (unsigned int j = 0; j < V1.size(); j++){
        for (unsigned int k = 0; k < V1.size(); k++){
            V2.push_back(V1[i] * V1[j] * V1[k]);
            if (i == j || i == k || j == k || (i == k ) && k==j)
            {
                void earase(vector<int> V2, unsigned int z);
            }
            z++;
        }
    }
}

sort(V2.begin(), V2.end());

ofstream file2;
file2.open("output.txt");
file2 << V2.back();
file2.close();
}

这是input.txt文件

4
1 2 3 4

完成程序后,对向量2进行排序,并将向量2中的最后一个数字写入'output.txt',但它只会在向量1乘以3的相同值时写入值。

我认为问题出现在'if'语句和'z'整数中,有没有更有效的方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

if的正文实际上与您预期的完全不同:

if (i == j || i == k || j == k || (i == k ) && k==j)
{
    void earase(vector<int> V2, unsigned int z); // <<<<<<<
}

您没有致电 earase。相反,您声明一个名为earase的函数。如果要调用该函数,请将其命名为:

if (i == j || i == k || j == k || (i == k ) && k==j)
{
    earase(V2, z);
}

顺便说一句,您可以通过一些调试输出(例如std::cout << "if entered";之前/之前的earase)轻松检查它。但是,请记住,这实际上并没有改变V2

答案 1 :(得分:0)

非平等职位是微不足道的,不需要测试(假设您只想要每个组合一次):

for (unsigned int i = 0; i < V1.size(); i++){
    for (unsigned int j = 0; j < i; j++){
        for (unsigned int k = 0; k < j; k++){
            V2.push_back(V1[i] * V1[j] * V1[k]); } } }

如果由于某种原因,你想多次想要所有的每个组合(好像你已经完成了所有N个立方体的可能性,只跳过重复的位置),只需按照上述简单的方式进行多次推送。