关于判断语句失效的问题(新手求教)

为什么我写的判断语句没有用,求教大佬

图片说明
图片说明

这类似的问题我建议你可以把你的判断条件对应的变量值输出到屏幕上看(如果你不习惯设置断点调试),就是在if语句前加:printf(“t is:%lf”,t);
然后你在看输出的结果,是前面错了还是判断语句错了

图片说明

你的t<0不成立所以没执行第一个输出;
判断语句是不会失效的;如果没出现你逻辑分析的效果,那只能说明代码没执行到判断逻辑处,或者已经执行了但是不是你分析的那条执行路径

if(t<0)不成立

图片说明if(t<0)不成立

根据你的做法,s肯定是小于等于s1的,所以t < 0不会成立,你看看你的代码能不能表达你的本意

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

    double x1,x2,y1,y2,d,s,t;
    int s1;

    while(scanf("%lf%lf%lf%lf",&x1,&x2,&y1,&y2)!=EOF){

        d = (x1-x2)*(x1-x2) + (y1-y2)*(y1-y2);
        s = 0.5*d;

        s1 = (int)s;
        printf("s1 = %lf;\ts = %d\t;",s1,s);

        t = s- s1;
        printf("t = %.1f;\n",t);

    }
    return 0;
} 

测试结果如图:
图片说明
你的逻辑t<0不会执行,所以一直输出第二个;
如果你还觉得有问题,那么问题出在你的程序而不是ifelse判断逻辑错误
就像楼上说的:
根据你的做法,s肯定是小于等于s1的

纠正一下上面的话,你的逻辑t<0执行了
只不过执行的结果为false
所以if的逻辑体没执行
而执行了else的逻辑体

还有你的问题就出在

 s1 = (int)s;

所以你不必再测了没有意义。
但是你可以去了解一下double转换为int后的精度问题
这里面还是有可学的知识的

建议逐个打印取值,看看问题在哪里