繁体   English   中英

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

[英]Why is my function not working properly

我检查向量中数字是否为偶数或奇数的函数无法正常工作。 此功能将打印我在矢量中键入的数字,并将其分为EVENS / ODDS 2类。 但是,如果我有一个负数,则可能无法打印而不是正常工作。 有问题的代码在这里:

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";
}

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

对于负数nn % 2在C ++中返回0-1 它永远不会返回1 ,因此条件对于负输入不能成立。

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

请参见具有负值的模运算符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM