C++ 程序似乎跳过了';如果';陈述
我试图创建一个程序,将向量1('V1')中的3个不相等值相乘,然后写入向量2('V2')。我使用了3个for循环和一个整数来计算向量2的值。但程序跳过了“if”语句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
#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]); } } }