简单计算器题目

实现以下功能:
1.在进行完一次运算后,询问用户是否继续运算。只要用户输入y/Y就可以继续运算,而不是只能计算一次。
2.当用户的输入有误时,不退出程序,而是要求用户继续输入表达式计算。
提示:
可以考虑使用do...while循环结构,配合循环控制变量来解决,代码仍然都写在main函数中即可。
写完代码后,可以测试一下:在询问循环是否继续时输入"yyyyy",会发生什么情况呢?如何解决?
 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    double num1, num2;
    char op;
    char flag = 'y';
   
    do
    {
        printf("请输入需要计算的表达式:");
        //int ret是看了答案后才用的
        int ret = scanf("%lf %c %lf", &num1, &op, &num2);
        //如输入多余的运算符或者操作数,则直接退出
        if (ret != 3) {
            printf("请重新输入\n");
            // 不加的话会直接退出
            while (getchar() != '\n')
                ; 
            continue;
        }
        switch (op) {
            case '+':
                printf("%.2f + %.2f = %.2f\n", num1, num2, num1 + num2);
                break;
            case '-':
                printf("%.2f - %.2f = %.2f\n", num1, num2, num1 - num2);
                break;
            case '*':
                printf("%.2f * %.2f = %.2f\n", num1, num2, num1 * num2);
                break;
            case '/':
            {
                if (num2 != 0)
                {
                    printf("%.2f / %.2f = %.2f\n", num1, num2, num1 / num2);
                }
                else
                {
                    printf("Error:除数为0!请重新输入\n");
                    continue;
                }
                break;
            }
            default:
                printf("Error:输入的表达式不合法!请重新输入\n");
                continue;
        }
        printf("是否继续计算?(输入'y/Y'继续,其他任意建结束):");
        // 不加的话会直接退出
        while (getchar() != '\n')
            ; 
        scanf("%c", &flag);
    } while (flag == 'y' || flag == 'Y');

    return 0;
}

随记:

  1. 需要用到 while (getchar() != '\n'); 清空标准输入缓冲区,否则会直接被读取到‘\n’,然后直接退出程序
  2. 输入的表达式应当符合格式要求,应当正常录入两个操作数和一个运算符,否则直接退出程序:利用scanf()的返回值解决,scanf()的返回值是成功读取并赋值的输入项个数

待解决:

在询问循环是否继续时输入"yyyyy",会发生什么情况呢?如何解决?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发际线正在上移

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值