2

大家好!我正在解决 S.Kochan 的“用 C 编程”一书的练习部分中的一个问题,实际上陷入了这个问题,这表明在 C 中创建一个简单的计算器,它将中间结果保存在所谓的“累加器”中。因此,当您输入一个值,然后按“S”时 - 应该保存该值,并且应该使用该值执行所有进一步的操作。当您按“E”时 - 程序应该结束,当您按任何基本算术符号时,应该执行适当的操作等。我正在使用永恒的 for 循环和 switch-case 运算符,但出了点问题。值不是正确显示<以便算术运算。

这是我的代码

#include <stdio.h>

int main(void)
{
    float accumulator, value;
    char operator;

    printf("Calculator\nType in your value:\n");
for(;;)
{
    scanf("%f %c %f", &accumulator, &operator, &value);

    switch(operator)
    {
        case 'S':
        printf("=%.2f\n", accumulator);
        break;
        case 'E':
        printf("=%.2f\nEnd of programm");
        break;
        case '+':
        accumulator=accumulator+value;
        printf("=%.2f", accumulator);
        break;
        case '-':
        accumulator=accumulator-value;
        printf("=%.2f", accumulator);
        break;
        case '*':
        accumulator=accumulator*value;
        printf("=%.2f", accumulator);
        break;
        case '/':
            if(value==0)
                printf("You can not divide by zero");
            else
                accumulator=accumulator/value;
                printf("=%.2f", accumulator);

        break;
        default:
        printf("Unknown symbol");
    }
}
return 0;
}

我究竟做错了什么?PS对不起我的英语不好)

4

1 回答 1

0

当您按 E 退出程序时,请使用 exit(0);而不是休息

 case 'E':
        printf("End of programm");
        exit(0);    

在您的程序中,您使用累加器来存储中间结果,但是您也将其作为每次迭代中的输入值,因此您可能会丢失保存先前操作结果的累加器的值,如果您扫描累加器会更好循环前的值只循环一次,然后在每次操作后使用累加器的值

为此,您需要像这样修改

scanf("%f", &accumulator );
for(;;)
{
    scanf(" %c %f",&operator, &value);
...........
于 2013-09-05T19:31:01.967 回答