我这个模数做错了什么?

问题描述 投票:0回答:1

我编写了一个 C++ 程序,它从用户接收一个数字,如果正数和偶数则打印 1,如果正数和奇数则打印 2,如果负数和偶数则打印 3,如果负数和奇数则打印 4,如果零则打印 0。 这是我的代码:

#include <iostream>
using namespace std;
int main () {
int n;
cin>>n;
if (n>0 && n%2==0)
    cout <<"1";
else if (n>0 && n%2==!0)
    cout <<"2";
else if (n<0 &&  n%2==0)
    cout <<"3";
else if (n<0 && n%2==!0)
    cout <<"4";
else if (n==0)
cout <<"0";
return 0;

}

一切都运行得很好,除了第四种情况,每当我输入负数和奇数时,它在屏幕上不会打印任何内容,这意味着所有这些情况都不是真的,我对第四种做错了什么,是否有负数的模数数字还是什么?

c++
1个回答
5
投票

n%2==!0
替换为
n % 2 != 0
。额外的间距是我个人的品味。

由于

运算符优先级

n%2==!0
被评估为 n%2==(!0),并且
!0
等于
1
。令人抓狂的是,您的方式对于正
n
情况非常有效,但它打破了负
n % 2
情况,对于奇数负
n
,从 C++11 开始返回
-1
。 (在此之前,结果是由实现定义的。)

© www.soinside.com 2019 - 2024. All rights reserved.