我检查向量中的数字是偶数还是奇数的函数不能正常工作。 此功能打印我在矢量中键入的数字,并将它们分为两类EVENS / ODDS。但是,如果我有一个负数,则存在一个问题,即不能打印它而是平均工作。 有问题的代码在这里:
void printEvensAndOddsVector(const vector <int>& new_v1)
{
cout << "Vector Evens: ";
for (unsigned int i = 0; i < new_v1.size(); ++i)
{
if (new_v1.at(i) % 2 == 0)
{
cout << new_v1.at(i) << " ";
}
}
cout << " \n";
cout << "Vector Odds: ";
for (unsigned int i = 0; i < new_v1.size(); ++i)
{
if (new_v1.at(i) % 2 == 1) // Here is the problem.
{
cout << new_v1.at(i) << " ";
}
}
cout << " \n";
}
或更确切地说这一行:if (new_v1.at(i) % 2 == 1)
它打印的数字是奇数,但只有正数而不是负数。
但如果我将其更改为if (new_v1.at(i) % 2 != 0)
,那么它可以正常工作。
为什么会发生这种情况并且平等运算符存在问题?
如果是,那么为什么即使在使用相同的算子时它们是负片也会被打印出来?
此处的代码供参考。
clude <iostream>
#include <vector>
using namespace std;
void fillVector(vector <int>&);
void printVector(const vector <int>&);
void printEvensAndOddsVector(const vector <int>&); // Prints Evens and Odds.
int main()
{
vector <int> v1;
fillVector(v1);
printVector(v1);
printEvensAndOddsVector(v1);
cout << "\n\n\n";
system( "pause");
return 0;
}
// Function Definitions
void fillVector(vector <int>& new_v1)
{
int number;
cout << "Type in numbers and type -100 to stop: ";
cin >> number;
while (number != -100)
{
new_v1.push_back(number);
cin >> number;
}
}
void printVector(const vector <int>& new_v1)
{
cout << "\nVector: ";
for (unsigned int i = 0; i < new_v1.size(); ++i)
{
cout << new_v1.at(i) << " ";
}
cout << " \n";
}
void printEvensAndOddsVector(const vector <int>& new_v1)
{
cout << "Vector Evens: ";
for (unsigned int i = 0; i < new_v1.size(); ++i)
{
if (new_v1.at(i) % 2 == 0)
{
cout << new_v1.at(i) << " ";
}
}
cout << " \n";
cout << "Vector Odds: ";
for (unsigned int i = 0; i < new_v1.size(); ++i)
{
if (new_v1.at(i) % 2 == 1)
{
cout << new_v1.at(i) << " ";
}
}
cout << " \n";
}
答案 0 :(得分:3)
这一行:
if (new_v1.at(i) % 2 == 1)
。它打印的数字是奇数,但只有正数而不是负数。
对于否定的n
,n % 2
会在C ++中返回0
或-1
。它永远不会返回1
,因此对于负输入,条件不可能为真。
正如您所发现的那样,与零相比可以发挥作用。