-
C语言程序设计第五章的一道题
输入数字和字符,字符S
表示开始,字符E
表示结束,然后就是+-*/
,运行结果应该是这样的:5S = 5.00 计算开始 2+ = 7.00 3- = 4.00 5E = 4.00 计算结束
-
我的代码是这样的
#include <stdio.h> #include <stdbool.h> int main(void) { float num; float num_o; char operator; bool cal = true; printf("开始运算:\n"); printf("输入数字和运算符,第一个运算符为S\n"); do { printf(":"); scanf("%f%c", &num, &operator); } while(operator != 'S'); printf("= %f\n", num); while (cal) { printf(":"); scanf("%f%c", &num_o, &operator); switch(operator) { case 'S': num = num_o; break; case '+': num = num + num_o; break; case '-': num = num - num_o; break; case '*': num = num * num_o; break; case '/': num = num / num_o; break; //请注意这里 case 'E': num = num; printf("= %f\n", num); printf("计算结束"); cal = false; break; default: printf("未知的运算符\n"); num = num; break; } printf("= %f\n", num); } return 0; }
那么问题来了
请看上面代码有一个注释,case 'E'
那里,应该是E
计算结束,但是运行后,如果输入数字和E,那么会print出未知的运算符
,而不是计算结束
。但是我把E
换成别的字符,比如D
,我输入数字和D
,就是正常的print计算结束
。
求解答。谢谢~~
E
跟在数字后面在C语言里面表示科学计数法数字,比如3E2
表示3×10^2
也就是300
。所以你输入
数字+E
的时候,整个输入都会被当做数字,而后面的操作符是一个空字符,所以会走default
分支:scanf("%f%c", &num_o, &operator);
解决方法1:用空格分开数字和字符来输入,比如
5 E
。相应地读取的代码变为:scanf("%f %c", &num_o, &operator);
解决方法2:不要用
E
表示结束,比如用你所说的D
。