数学方程式不会被读取。为什么是这样?

时间:2013-10-15 23:06:31

标签: c

很抱歉没有添加整个代码。我的愚蠢错误。

  #include <stdio.h>
int main(int argc, char ** argv) {
    float celcius, fahrenheit, kelvin, interval;
    int c, f, k;
    char temp;

    printf("which temperature is being input? (C,F,K) ");
    scanf("%s", &temp);

    if(temp == 'c') {
        printf("enter a starting temperature");
        scanf("%f", &celcius);
        fahrenheit=celcius*9/5+32;
        kelvin=celcius+273.2;
        printf("%f, %f, %f", celcius, fahrenheit, kelvin);
        }

        else if(temp == 'f') {
        printf("Please enter a starting temperature");
        scanf("%f", &fahrenheit);
        celcius=fahrenheit-32*5/9;
        kelvin=fahrenheit-32*5/9+273.2;
        printf("%f, %f, %f", celcius, fahrenheit, kelvin);
           }

           else if(temp == 'k') {
            printf("enter a starting temperature");
                scanf("%f", &kelvin);
                fahrenheit=kelvin-273*1.8+32;
                celcius=kelvin-273.2;
                printf("%f, %f, %f", celcius, fahrenheit, kelvin);
            }
}

因此它询问输入的温度和起始温度,但为什么不计算数学方程?

4 个答案:

答案 0 :(得分:4)

正在计算数学方程式

fahrenheit=celcius*9/5+32;
kelvin=celcius+273.15;   

但你不打印它。
试试这个

printf("%f, %f, %f", celcius, fahrenheit, kelvin);  

不要忘记将scanf("%s", &temp);更改为

scanf(" %c", &temp);  
temp = tolower(temp); // include <ctype.h> header  

或更好地放置

int c;
while ((c = getchar()) != `\n` && c != EOF);
scanf(" %c", &temp);之后

。这将占用输入的第一个字符以外的所有字符。

根据OP的评论;

  

如何才能将温度名称显示在温度的顶部?

printf("celcius \tfahrenheit \tkelvin);  
printf("%5f\t%5f\t%5f", celcius, fahrenheit, kelvin);

答案 1 :(得分:1)

您没有展示如何定义变量temp,但以这种方式读取字符串是非常危险的。如果temp是一个字符,那么指向它的地址并将其视为字符串就会遇到麻烦。确保您在'\0'之后立即将temp写入该位置,如果用户输入的字符多于一个字符,则他们可能造成的损害甚至会更大。

您可以通过getc来电阅读单个字符:

temp = getc(stdin);

我建议您确保它是小写的 - 因为您要与c进行比较:

temp = lower(getc(stdin));

然后很明显,当你打印出一个变量时,你必须打印出你计算的变量。您计算celcius等 - 但您的print语句是

printf("%f, %f, %f", c, f, k);

cfk可能是有效变量 - 但它们不是您在之前的行中计算的变量。用

替换print语句
printf("Celsius: %.1f; Fahrenheit: %.1f; Kelvin: %.1f\n", celcius, fahrenheit, kelvin);

或者,如果您希望名称高于数字:

printf("\tC\tF\tK\n\t%6.1f\t%6.1f\t%6.1f\n", celcius, fahrenheit, kelvin);

请注意使用\t - tab字符 - 使事物对齐(大约),格式说明符%4.1f表示“字段宽度为6的数字,小数点后的一个有效数字“。

还有一个注意事项 - 它是Celsius,而不是celcius。但这是你遇到的最少的问题。

答案 2 :(得分:1)

看起来正在计算,但是你打印的是错误的变量。尝试在print语句中用celsius,fahrenheit和kelvin替换c,f和k。

答案 3 :(得分:1)

您必须在变量名称中保持一致,不能像现在这样混淆它们。

因为你是这样计算的:

fahrenheit=celcius*9/5+32;
kelvin=celcius+273.15;   

但是这行不会打印出来,因为你有错误的变量:

printf("%f, %f, %f", c, f, k);

将其更改为正确的变量名称并输入如下:

printf("%f, %f, %f", celcius, fahrenheit, kelvin);