c/c++初学者易错问题(勿喷)

C语言初学者,很容易掉坑的一个题,char字符类型输入换行符包含了一个\0,本人因为没注意到,掉了个大坑

题目

Q1721.(10分) 用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 a,c;

    char b;

    char n,d;

    while(1){

        printf("Please enter the expression:\n");

        scanf("%f %c%f",&a,&b,&c);

        switch((int)b){

             case 43:

                printf("%f + %f = %f\n",a,c,a+c);

            break;

             case '-':

               printf("%f - %f = %f\n",a,c,a-c);

                break;

             case '*':

               printf("%f * %f = %f\n",a,c,a*c);

                break;

             case '/':

               if(c==0){

                  printf("Division by zero!\n");

                  break;

                }else{

                  printf("%f / %f = %f\n",a,c,a/c);

                }

                break;

             default :

                printf("Unknown operator!\n");

                break;

            }

         printf("Do you want to continue(Y/N or y/n)?");

         scanf("%c%c",&d,&n);

         switch(n){

            case 'y':

            case 'Y':break;

            case 'n':

            case 'N':return 0;

         }

        }

        return 0; 

    }

要定义一个char d先把换行符\0获取了,这样才能判断 yY nN,题才能做

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值