关于华氏摄氏温度转换表问题,不合法数据测试点为什么过不了?

img

#include <stdio.h>
int main()
{
    int lower,upper,fahr;
    float celsius;
    scanf("%d %d",&lower,&upper);
    printf("fahr celsius\n");
    if(0<=lower&&lower<=upper&&upper<=100)
    {
        for(fahr=lower;fahr<=upper;fahr+=2)
        {
        celsius=5*(fahr-32)/9.0;
        printf("%d%6.1f\n",fahr,celsius);
        }
    }
    else
    {
        printf("Invalid.\n"); 
    }
    return 0;
} 

img


华氏摄氏温度转换表问题,
如图三,为什么我的代码在不合法数据时会报错?

这样改,试试,供参考:

#include <stdio.h>
int main()
{
    int lower,upper,fahr,k;
    float celsius;
    scanf("%d %d",&lower,&upper);

    if(lower < 1 || upper < 1 || lower > upper || lower > 100 || upper > 100)
    //if(0<=lower&&lower<=upper&&upper<=100)
        printf("Invalid.");
    else
    {
        printf("fahr celsius\n");
        for(fahr = lower, k = 0; fahr <= upper; fahr+=2)
        {
            celsius=5.0*(fahr-32)/9.0;
            printf(k++ ? "\n%d%6.1f" : "%d%6.1f", fahr, celsius);
        }
    }
    return 0;
}

你试试把Invalid后面的点'.'去掉

我输入了 1 100.1
按理说不合法
可是你的程序并不能判断

最低边界如果是0的话也不是合法范围哦,这里需要,你的代码是会当成正常的范围处理的,不知道是不是这个原因,因为题目说了是两个正整数。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7556100
  • 这篇博客也不错, 你可以看下例3.1 有人用温度计测量出用华氏法表示的温度,今要求把它转换为以摄氏法表示的温度。
  • 除此之外, 这篇博客: 华氏温度与摄氏温度对照表中的 华氏温度与摄氏温度对照表 部分也许能够解决你的问题。
  • 以下回答由chatgpt基于相关博客总结生成:

    答案:

    这个问题是因为当输入的温度范围不合法时,程序仍然会进入循环,并尝试计算摄氏温度和输出转换表。在计算摄氏温度时,由于其中使用了分母为零的操作,导致程序报错。为了解决这个问题,我们可以在进入循环之前先进行范围合法性的检查,只有在范围合法时才执行循环以及生成转换表的操作。

    以下是修改后的代码:

    #include <stdio.h>
    
    int main()
    {
        int lower, upper, fahr;
        float celsius;
        scanf("%d %d", &lower, &upper);
        printf("fahr celsius\n");
        if (0 <= lower && lower <= upper && upper <= 100)
        {
            for (fahr = lower; fahr <= upper; fahr += 2)
            {
                celsius = 5 * (fahr - 32) / 9.0;
                printf("%d%6.1f\n", fahr, celsius);
            }
        }
        else
        {
            printf("Invalid.\n");
        }
        return 0;
    }
    

    经过修改后,当输入的温度范围不合法时,程序会直接输出"Invalid.",不会再进入循环进行摄氏温度的计算和输出。这样就能避免报错的问题了。

    希望上述解决方案对你有帮助。如果你有任何疑问,请随时追问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^