为什么printf工作但scanf不工作?

时间:2013-10-08 16:48:33

标签: c

好吧所以我必须创建一个天气程序,当我尝试运行代码时,我没有错误,但它只会打印“输入起始温度”和“输入结束温度”。但是它不会让我为它输入数据。有什么我需要改变的吗?我知道我还没有完成代码,但我只想在继续其余代码之前测试输入。谢谢你的帮助!

#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);
    }
}

4 个答案:

答案 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语句可以提高可读性。