gpt4 book ai didi

c - 为什么 "if constraint"在代码中不起作用?

转载 作者:行者123 更新时间:2023-11-30 20:44:34 30 4
gpt4 key购买 nike

第一个 if 语句不起作用,代码在不考虑约束的情况下运行。

    #include <stdio.h>
int main(void)

{
int with;
int inacbal;
float acleft;
scanf("%d",&with);
scanf("%d",&inacbal);
if(0<=with<=2000&&0<=inacbal<=2000) //this statement not working
{
if((with%5)==0)
{
if(inacbal>with)
{
acleft=(float)inacbal-(float)with-0.50;
printf("%.2f",acleft);
}
else
printf("%d",inacbal);
}
else
printf("%d",inacbal);
}
return 0;
}

即使输入的值大于约束关系,循环也会运行。

最佳答案

虽然数学家有时会使用简写 a < b < c ,C语言更严格一点。

您必须重写:

if(0<=with<=2000&&0<=inacbal<=2000)

类似于:

if((0 <= with) && (with <= 2000) && (0 <= inacbal) && (inacbal <= 2000))

您实际上拥有的有效的C,但它并没有达到您通常期望的效果。表达式1 < 2 < 3实际上的意思是:计算1 < 2 (分别给出 false 和 true 的积分真值 01),然后将那个3 进行比较.

如果您想要使用更短的形式,您可以使用类似以下内容的内容:

#define between(a,b,c) (((a) <= (b)) && ((b) <= (c)))
:
if (between (0, with, 2000) && between (0, inacbal, 2000))

不过,如果您使用 a++ 等术语,则需要注意重复的副作用。使用时。更安全的方法可能是将宏替换为以下内容:

int between (int a, int b, int c) {
return (a <= b) && (b <= c);
}

关于c - 为什么 "if constraint"在代码中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25947435/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com