Char 砍砍 2022-05-04 09:16 采纳率: 66.7%
浏览 58
已结题

我问一下为什么我的代码循环不了,只能循环一次就出来了

用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
操作数1 运算符op 操作数2
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。

要求如下:
(1)要求程序能进行浮点数的算术运算,操作数1和2用float类型定义,运算符op用字符型定义。
(2)要求输入的算术表达式中的操作数和运算符之间可以加入任意多个空白符
输入提示信息:"Please enter the expression:\n"
输入数据格式:"%f %c%f"
输出数据格式:以加运算为例:"%f+ %f = %f\n"
(3)要求连续做多次算术运算,每次运算结束后,程序都给出提示:
Do you want to continue(Y/N or y/n)?
用户输入Y或y时,程序继续进行其他算术运算;否则程序退出运行状态。
输入提示信息:"Do you want to continue(Y/N or y/n)?"
输入数据格式:" %c"
(4)如果输入错误的运算符,则输出"Unknown operator!\n",不结束程序运行,继续询问是否做下一次运算。
(5)如果除数为0,则输出"Division by zero!\n",不结束程序运行,继续询问是否做下一次运算。
(6)允许浮点数的误差在1e-7范围内。
提示:请直接拷贝粘贴题目中给定的格式字符串。

#include<stdio.h>
int main()
{
float a1,a2,b1;
char op,a;
a='y';

while(a=='y'||a=='Y')
{
    printf("Please enter the expression:\n");
    scanf("%f %c%f",&a1,&op,&a2);
    switch(op)
    {
        case'+':b1=a1+a2;printf("%f + %f = %f\n",a1,a2,b1);break;
        case'-':b1=a1-a2;printf("%f - %f = %f\n",a1,a2,b1);break;
        case'*':b1=a1*a2;printf("%f * %f = %f\n",a1,a2,b1);break;
        case'/':if(a2==0)
               {
                   printf("Division by zero!\n");
                   break;
               }
               b1=a1/a2;
               printf("%f / %f = %f\n",a1,a2,b1);
               break;
        default:printf("Unknown operator!\n");break;      
    }
    
    printf("Do you want to continue(Y/N or y/n)?");
    scanf("%c",&a);
}
return 0;

}



  • 写回答

2条回答 默认 最新

  • 关注

    scanf("%f %c%f",&a1,&op,&a2);后面加一句getchar();来接收回车符,否则会影响scanf("%c",&a)的读取。
    scanf("%c",&a);后面也加一句getchar();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月4日
  • 创建了问题 5月4日

悬赏问题

  • ¥15 像这种代码要怎么跑起来?
  • ¥15 怎么改成循环输入删除(语言-c语言)
  • ¥15 安卓C读取/dev/fastpipe屏幕像素数据
  • ¥15 pyqt5tools安装失败
  • ¥15 mmdetection
  • ¥15 nginx代理报502的错误
  • ¥100 当AWR1843发送完设置的固定帧后,如何使其再发送第一次的帧
  • ¥15 图示五个参数的模型校正是用什么方法做出来的。如何建立其他模型
  • ¥100 描述一下元器件的基本功能,pcba板的基本原理
  • ¥15 STM32无法向设备写入固件