为什么我的函数无法正常工作

Why is my function not working properly

本文关键字:工作 常工作 我的 函数 为什么      更新时间:2023-10-16

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

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

对于负nn % 2返回0-1 C++。它从不返回1,所以负输入的条件不能为真。

正如您所发现的,与零进行比较是可行的。

请参阅带负值的模运算符