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,题才能做