Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序似乎跳过了';如果';陈述_C++_If Statement_Vector - Fatal编程技术网

C++ 程序似乎跳过了';如果';陈述

C++ 程序似乎跳过了';如果';陈述,c++,if-statement,vector,C++,If Statement,Vector,我试图创建一个程序,将向量1('V1')中的3个不相等值相乘,然后写入向量2('V2')。我使用了3个for循环和一个整数来计算向量2的值。但程序跳过了“if”语句 #include <vector> #include<fstream> #include<iostream> #include <algorithm> using namespace std; void earase(vector<int> V2, unsigned i

我试图创建一个程序,将向量1('V1')中的3个不相等值相乘,然后写入向量2('V2')。我使用了3个for循环和一个整数来计算向量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();
}
完成后,程序对向量2进行排序,并将向量2中的最后一个数字写入“output.txt”,但它只会将向量1中的相同值乘以3次,才会写入值


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

if的主体实际上与您预期的完全不同:

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

顺便说一句,您可以通过一些调试输出(如
std::coutif
主体实际上与您预期的完全不同:

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

顺便说一句,您可以很容易地检查一些调试输出(如
std::cout非相等位置很简单,不需要测试(假设您只需要每个组合一次):

for(无符号整数i=0;i

如果出于某种原因,您多次想要所有组合(就好像您经历了所有N个立方的可能性,只跳过重复的位置),只需通过上述简单方法,并将每个组合推几次。

非相等位置很简单,无需测试(假设您只想要每个组合一次):

for(无符号整数i=0;i

如果出于某种原因,您多次想要所有组合(就好像您经历了所有N个立方的可能性,只跳过重复的位置)只需按照上面的简单方法进行多次推送。

i==k
j==k
都意味着
i==k&&k==j
,因此后者在您的析取中是多余的,你不是。从C++开始,我做了很长时间,所以我不知道你是否可以用这个语法在参数中传递一个向量。但是,我确信调用<代码> EARASE<代码>的语法不好,你不能在调用函数时放变量的类型。你说“不相等的值”,但是似乎已经尝试过(并且失败了)得到“不等于位置”。获得不相等的位置要简单得多。但是,你想要哪一种呢?你可能想考虑在if中添加一组括号。如果你在没有括号的情况下混合< <代码> > < <代码> > <代码> & & > >,编译器通常会向你发出警告(你是指<代码> A(B&C)< /COD>或<代码>(A{ B)&C)< /代码>?我永远记不起哪个优先级更高。它可能不是你想要的。无论是
I==k
还是
j==k
都意味着
I==k&&k==j
,因此后者在你的析取中是多余的。如果你试图调用一个名为
earase()的函数,你不是。从C++开始,我做了很长时间,所以我不知道你是否可以用这个语法在参数中传递一个向量。但是,我确信调用<代码> EARASE<代码>的语法不好,你不能在调用函数时放变量的类型。你说“不相等的值”,但是似乎已经尝试过(并且失败了)得到“不等于位置”。获得不相等的位置要简单得多。但是,你想要哪一种呢?你可能想考虑在if中添加一组括号。如果你在没有括号的情况下混合< <代码> > < <代码> > <代码> & & > >,编译器通常会向你发出警告(你是指<代码> A(B&C)< /COD>或<代码>(A{ B)&C)< /代码>?我永远记不起哪个优先级更高。它可能不是在做你想做的事。
if (i == j || i == k || j == k || (i == k ) && k==j)
{
    earase(V2, z);
}
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]); } } }