在C语言编程的第6章练习#5,“简单”打印“计算器”
Kochan编写的C语言编程第6章练习#5
编写一个程序,作为一个简单的“打印”计算器。 该程序应允许用户键入表单的表达式:
number operator
。 程序应识别以下运算符:+
,-
,*
,/
,S
。E
–S
运算符告诉程序将“累加器”设置为输入的数字。
–E
运算符告诉程序执行将结束。对累加器的内容执行算术运算,其中键入的数字用作第二个操作数。
以下是“示例运行”,显示程序应如何运行:Begin Calculations 10 S Set Accumulator to 10 = 10.000000 Contents of Accumulator 2 / Divide by 2 = 5.000000 Contents of Accumulator 55 - Subtract 55 -50.000000 100.25 S Set Accumulator to 100.25 = 100.250000 4 * Multiply by 4 = 401.000000 0 E End of program = 401.000000 End of Calculations.
确保程序检测到除零并检查未知运算符。
如果我输入* 2
则返回inf
。 这就是我做的:
#include int main(void) { float number1, number2; char operator; do { printf("Enter your number with S sign that set it as your accumulator \n"); scanf("%f %c", &number1, &operator); } while (operator != 'S'); do { printf("Enter your expression with the correct format\n"); scanf("%f %c", &number2, &operator); if ( operator == '+' || operator == '-' || operator == '/' || operator == '*') { switch (operator) { case '+': number1 = number1 + number2; printf("=%.6f\n", number1); break; case '-': number1 = number1 - number2; printf("=%.6f\n", number1); break; case '*': number1 = number1 * number2; printf("=%.6f\n", number1); break; case '/': if( number2 == 0) printf("Division by Zero\n"); else { number1 = number1 / number2; printf("%.6f\n", number1); } break; default: printf("not a valid operator\n"); break; } } else printf("Retry.\n"); } while (operator != 'E'); printf("End of Calculations\n"); return 0; }
对于scanf("%f %c", &number2, &operator);
声明,*不是%f
的有效字符。 scanf失败但do块再次尝试读取*进入%f
。
将语句替换为
if ( ( scanf("%f %c", &number2, &operator)) != 2) { number2 = 1.0f; operator = 0; scanf ( "%*[^\n]"); }
scanf将返回成功读取的项目数。 如果scanf没有返回2,则将值设置为某个适当的值, scanf ( "%*[^\n]);
将读取并丢弃缓冲区中不是换行符的所有内容。
为number1
的第一次扫描做类似的事情