好吧所以我必须创建一个天气程序,当我尝试运行代码时,我没有错误,但它只会打印“输入起始温度”和“输入结束温度”。但是它不会让我为它输入数据。有什么我需要改变的吗?我知道我还没有完成代码,但我只想在继续其余代码之前测试输入。谢谢你的帮助!
#include <stdio.h>
int main(int argc, char **argv)
{
float celcius, fahrenheit, kelvin, ending, interval;
int c, f, k, temp;
printf("which temperature is being input? (C,F,K) ");
scanf("%d", &temp);
if (temp == c)
{
printf("enter a starting temperature");
scanf("%f", &celcius);
printf("enter an ending temperature");
scanf("%f", &ending);
fahrenheit = celcius * 9 / 5 + 32;
kelvin = celcius + 273.15;
}
if (temp == f)
{
printf("enter a starting temperature");
scanf("%f", &fahrenheit);
celcius = fahrenheit - 32 * 5 / 9;
kelvin = fahrenheit - 32 * 5 / 9 + 273.15;
printf("enter an ending temperature");
scanf("%f", &ending);
if (temp == k)
{
}
printf("enter a starting temperature");
scanf("%f", &kelvin);
fahrenheit = kelvin - 273 * 1.8 + 32;
celcius = kelvin - 273.15;
printf("enter an ending temperature");
scanf("%f", &ending);
}
}
答案 0 :(得分:3)
此:
if (temp == c)
将temp
中新读取的值与未初始化变量c
中的未定义值进行比较。这是未定义的行为。
你可能意味着
if (temp == 'c')
与角色进行比较,但您还需要:
char temp;
if (scanf("%c", &temp) == 1)
{
if (temp == 'c')
{
/* more code here */
}
}
请注意,检查scanf()
的返回值有助于使程序更加健壮,并避免进一步使用未初始化的值(如果scanf()
无法读取内容,则您不应该读取目标变量,因为它没有被写入。)
答案 1 :(得分:0)
if (temp == c)
您正在将temp与未初始化的c
值进行比较同样适用于
if (temp == f)
然后每件事都会正常工作,使其更加用户友好,在printf中加上'\ n'
像这样,printf("enter a starting temperature \n");
答案 2 :(得分:0)
下面:
printf("which temperature is being input? (C,F,K) ");
scanf("%d", &temp);
您要求输入字符,但之后您尝试扫描int
。这会甩掉你scanf()
次来电的所有其余内容。
答案 3 :(得分:0)
您的变量temp被声明为整数。实际上,scanf()想要读取一个整数(%d),但得到一个char。 因此,您将temp读作char。 此外,您可以使用
9.0/5.0
而不是
9/5
此外,使用switch语句可以提高可读性。