为什么我的功能无法正常工作

时间:2015-01-14 15:31:15

标签: c++ function

我检查向量中的数字是偶数还是奇数的函数不能正常工作。 此功能打印我在矢量中键入的数字,并将它们分为两类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";
}

1 个答案:

答案 0 :(得分:3)

  

这一行:if (new_v1.at(i) % 2 == 1)。它打印的数字是奇数,但只有正数而不是负数。

对于否定的nn % 2会在C ++中返回0-1。它永远不会返回1,因此对于负输入,条件不可能为真。

正如您所发现的那样,与零相比可以发挥作用。

请参阅Modulo operator with negative values