if 语句中的否定条件

-4 c if-statement

理论上这应该工作得很好,但每次我输入-1001or时-3000,它都会继续运行,就好像它完全满足条件并且数字相加一样。我不知道还能尝试什么。

if((-1000 <= A, A<= 1000) &&(-1000 <= B, B <= 1000)){
Run Code Online (Sandbox Code Playgroud)

Chr*_*ris 5

这并不像你期望的那样工作。

if((-1000 <= A, A<= 1000) &&(-1000 <= B, B <= 1000)){
Run Code Online (Sandbox Code Playgroud)

(-1000 <= A, A<= 1000)计算两个表达式,但作为一个整体,仅计算 的值A<= 1000。和-1000 <= A都可-1000 <= B以为假,如果其他表达式的计算结果为真,则整个表达式将为真。

如果编译器中启用了警告,它应该警告您有关表达式的值-1000 <= A-1000 <= B未使用的值。

您可能想要:

if ((-1000 <= A && A <= 1000) && (-1000 <= B && B <= 1000)) {
Run Code Online (Sandbox Code Playgroud)

要不就:

if (-1000 <= A && A <= 1000 && -1000 <= B && B <= 1000) {
Run Code Online (Sandbox Code Playgroud)

尽管这是一个观点问题,但我不喜欢必须切换心理齿轮以这种方式比较数字与变量。我宁愿:

if (A >= -1000 && A <= 1000 && B >= -1000 && B <= 1000) {
Run Code Online (Sandbox Code Playgroud)

当然,你也可以编写一个函数来处理这个问题。

int in_range(int val, int start, int end) {
    return val >= start && val <= end;
}
Run Code Online (Sandbox Code Playgroud)

进而:

if (in_range(A, -1000, 1000) && in_range(B, -1000, 1000)) {
Run Code Online (Sandbox Code Playgroud)