首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C语言编程的第6章练习5,“简单的”打印“计算器”

C语言编程的第6章练习5,“简单的”打印“计算器”
EN

Stack Overflow用户
提问于 2015-08-30 07:28:13
回答 1查看 2K关注 0票数 1

Kochan编写的C语言编程第6章中的练习5

编写一个程序,作为一个简单的“打印”计算器。程序应该允许用户键入表单:number operator的表达式。程序应该识别以下操作符:+-*/SE

  • S操作符告诉程序将“累加器”设置为键入的数字。
  • E操作符告诉程序执行到end.The,算术操作是在累加器的内容上执行的,其数字作为第二个操作数。 以下是显示程序应如何运行的“示例运行”: 开始计算10S集累加器至10 = 10.000000累加器2/除2= 5.000000累加器内容55 -减去55 -50.000000 100.25 S集累加器至100.25 = 100.250000 4*乘4= 401.000000 0 E程序结束= 401.000000计算结束。 确保程序检测到除法为零,并检查未知操作符。

如果输入* 2,它将返回inf。我就是这样做的:

代码语言:javascript
复制
#include <stdio.h>

int main(void)
{
    float number1, number2;
    char operator;

    do 
    {
        printf("Enter your number with S sign that set it as your accumulator \n");
        scanf("%f %c", &number1, &operator);

    } while (operator != 'S');


        do 
        {
            printf("Enter your expression with the correct format\n");
            scanf("%f %c", &number2, &operator); 

            if ( operator == '+' || operator == '-' || operator == '/' || operator == '*')
            {
                switch (operator)
                    {
                        case '+':
                            number1 = number1 + number2;
                            printf("=%.6f\n", number1);
                            break;
                        case '-':
                            number1 = number1 - number2;
                            printf("=%.6f\n", number1);
                            break;
                        case '*':
                            number1 = number1 * number2;
                            printf("=%.6f\n", number1);
                            break;
                        case '/':
                            if( number2 == 0) 
                                printf("Division by Zero\n");
                            else
                            {
                                number1 = number1 / number2;
                                printf("%.6f\n", number1);
                            }
                            break;
                        default:
                            printf("not a valid operator\n");
                            break;
                    }
            }
            else
                printf("Retry.\n");

        } while (operator != 'E'); 



    printf("End of Calculations\n");
    return 0;

}
EN

回答 1

Stack Overflow用户

发布于 2015-08-30 08:57:37

对于scanf("%f %c", &number2, &operator);语句,*不是%f的有效字符。扫描失败,但do块一次又一次尝试将*读入%f

将语句替换为

代码语言:javascript
复制
if ( ( scanf("%f %c", &number2, &operator)) != 2) {
    number2 = 1.0f;
    operator = 0;
    scanf ( "%*[^\n]");
}

扫描将返回已成功读取的项目数。如果scanf不返回2,那么将值设置为适当的值,scanf ( "%*[^\n]);将读取和丢弃缓冲区中不是换行符的所有内容。

number1的第一次扫描执行类似的操作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32294271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档