计算器输出c

时间:2014-07-02 05:52:18

标签: c output calculator

我使用switch case制作了一个简单的计算器程序,但输出与我预期的不同。

int main(){

    double a, b;
    double sum = 0;
    char o; //operator

    printf("Enter operator\n");
    scanf("%c", &o);
    printf("Enter first operand\n");
    scanf("%f", &a);
    printf("Enter second operand\n");
    scanf("%f", &b);



    switch (o)
    {

        case '+':
            sum = a + b;
            break;

        case '-':
            sum = a - b;
            break;
        case '*':
            sum = a * b;
            break;
        case '/':
            sum = a / b;
            break;
            if (b == 0){ printf("Error"); }
            break;

    }


    printf("The result is\n%10.10lf\n", sum);



    getchar();
    getchar();
}

'sum'的结果是一些巨大的天文数字。有人能说出原因吗?

4 个答案:

答案 0 :(得分:3)

ab都属于double类型。 doublescanf的正确格式说明符为%lf,而非%f(适用于float)。

scanf("%lf", &a);

请注意,在printf中,%f使用doublefloat double相同,因为它被提升为%lf)。自C99起,printf中的%f与{{1}}相同。

答案 1 :(得分:3)

请尝试使用%lf代替%f,因为这样您就可以ab代替double而不是float。< / p>

答案 2 :(得分:1)

您正尝试将double转换为floatscanfprintf函数内的隐式scanf正在做什么,它正在将整个(双)输入清除/重新格式化为空浮点值。这是一个工作:

#include<stdio.h>


int main(){

    double a, b;
    double sum = 0;
    char o; //operator

        printf("Enter operator\n");
        scanf("%c", &o);
        printf("Enter first operand\n");
        scanf("%lf", &a);
        printf("Enter second operand\n");
        scanf("%lf", &b);

        switch (o)
        {

        case '+':
            sum = a + b;
            break;

        case '-':
            sum = a - b;
            break;
        case '*':
            sum = a * b;
            break;
        case '/':
            sum = a / b;
            break;
            if (b == 0){ printf("Error"); }
            break;
        }

        printf("The result is\n %f\n", sum);
}

答案 3 :(得分:1)

正如大家所指出的那样,你需要scanf ("%lf", &a);和b一样。 现在在你的switch语句中你想要防止除以零:

case '/':
    sum = a / b;
    break;
    if (b == 0){ printf("Error"); }
    break;

但是在你达到这个条件之前,你会发现break;会发生什么。假设我们删除了第一次休息;无论如何,在打印错误消息之前仍会执行除零。 防止除零的一种方法是:

case '/':
    if (b)
        sum = a / b;
    else
        printf("Error");
    break;

我们在进行除法之前检查b != 0然后我们要么划分或打印错误信息。