還有大小寫的問題呢?s和e,聰明的程序,是可以接受大寫和小寫的,而你們的判斷,衹有小寫。
授人以渔,不授人以鱼。
/* 编写简单的计算器。该程序允许用户输入如下的格式算式: 数字 操作符 其中操作符 可以是下面的任意一个: + - * / S E 操作符S将计算器中的“记忆数字”设置为输入的数值。操作符E告诉程序节结束执行。如果输入的是算术操作符,那么就把计算器中 的“记忆数字”作为第一个操作数,用户输入的数字作为第二个操作数,计算结果作为“记忆数字”重新保存起来。下面是我们的计算 器运行的一个示意过程: Begin calculations 10 s 设置记忆数字为10 = 10.000000 显示记忆数字 2/ 除以2 =5.000000 减去55 55- -50.000000 100.25s 设置记忆数字为100.25 = 100.250000 4 * Multiply(乘以4) = 401.000000 0 E 结束运行 = 401.000000 End of calculations. 在程序中要求检查除数为 0 和未知的操作符这两种意外情况。 */ #include <stdio.h> #include <stdlib.h> double Memory = 0.0; // 寄存器 // 函數原型 void Show_Memory(void); // 主程序入口函數 int main(void) { double value; // 操作數 char operate; // 操作符 printf_s("\nBegin calculations\n"); // 非vc編譯器改用printf() do { fflush(stdin); // 清空標準輸入流數據以備接收輸入,非標準函數,沒有有效的替代方法! if (scanf_s("%lf %c", &value, &operate, 1) != 2) // 非vc編譯器改用scanf() { /* 注意scanf()的用法,格式控制符%lf和%c之間有空格,表示輸入應用空格分開。實際上不分開 也可以,但由於題目要求用到e作操作符,與C的科學記數法衝突,則與前面的數字連在一起會 造成輸入錯誤。*/ printf_s("value = %f, operate = %c\n", value, operate); printf_s("ERROR\n"); continue; } switch (operate) { case 's': case 'S': case 'e': case 'E': break; case '+': value = Memory + value; break; case '-': value = Memory - value; break; case '*': value = Memory * value; break; case '/': value = Memory / value; break; default: printf_s("ERROR\n"); continue; break; } if ((operate != 'e') && (operate != 'E')) { Memory = value; } Show_Memory(); } while ((operate != 'e') && (operate != 'E')); printf_s("\nEnd of calculations.\n"); printf_s("\nPress any key to continue..."); fflush(stdin); getchar(); return EXIT_SUCCESS; } // 顯示寄存器内容 void Show_Memory(void) { printf_s("= %f\n", Memory); }