Моя функция, которая проверяет, являются ли цифры в векторе четными или нечетными, не работает должным образом. Эта функция печатает числа, которые я набрал в векторе, и помещает их в 2 категории 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";
}
ли вам нужен весь этот код, чтобы продемонстрировать простой вопрос с оператором по модулю? 3 или 4 строки 'main()' программа - это все, что вам нужно. – PaulMcKenzie
Результат '%' на отрицательном числе, вероятно, отрицательный. –
@Paul да, я знаю это, но вопрос все еще остается. Я не спрашиваю, как самый быстрый или лучший способ его кодировать. Я делаю эту программу по какой-то причине, и мой код не работает. почему мой вопрос? – Johnson