#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;
}
这样改,试试,供参考:
#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的话也不是合法范围哦,这里需要,你的代码是会当成正常的范围处理的,不知道是不是这个原因,因为题目说了是两个正整数。
不知道你这个问题是否已经解决, 如果还没有解决的话:答案:
这个问题是因为当输入的温度范围不合法时,程序仍然会进入循环,并尝试计算摄氏温度和输出转换表。在计算摄氏温度时,由于其中使用了分母为零的操作,导致程序报错。为了解决这个问题,我们可以在进入循环之前先进行范围合法性的检查,只有在范围合法时才执行循环以及生成转换表的操作。
以下是修改后的代码:
#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.",不会再进入循环进行摄氏温度的计算和输出。这样就能避免报错的问题了。
希望上述解决方案对你有帮助。如果你有任何疑问,请随时追问。