C语言部分卷1C语言基础语法
节6格式化输入和输出
这里面的东西还是很多自己没见过,可以当字典一样至少应该看过一遍,自己有印象.下面这个题目自己就出问题了.
被自己菜到了,竟然在这个题目上弄这么久,应该直接问Google的
这个第7题我一定要单独问老师这个scanf的模式匹配的结果,自己就是因为不清楚,所以才想不到fflush(stdin
不管了,,不然就太亏了.)
第一点是用
Result接收scanf的结果,具体内容居然讲过了,一定要写<3,真是让我丢脸,上课的东西还是很有用的, 至少自己要看一遍留一个印象
第二点是
不加fflush(stdin)就是会无限循环,因为未匹配的都留在缓冲区里面了.进入下次循环的时候依然匹配不上,导致无限循环
第三点是
自己想在switch前面加一个if判断,,
如果if(true)就不执行switch的内容,if(false)就执行switch的内容.
结果自己纠结这个纠结半天,
if(false)执行switch的内容是自然的,因为顺序执行,
但是if(true)就不执行switch的内容自己居然想用goto来跳转到switch的后面….
,其实就是
在switch前面加上一个else来和这个if配对
自然就是
如果if(true)就不执行switch的内容,只执行if自己的花括号
if(false)就执行switch的内容.不执行自己的花括号.
最终自己的代码如下
有部分复用的代码是可以提取出来函数,然后调用四次的,但是本题的 重点不在这,重点在我前面说的三个点.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
| #include <stdio.h> #include <stdlib.h> int main(void) { double a, b; char op; char again = 'y'; int result;
do {
printf("\n请输入要计算的表达式(例如, 12.7 + 3.5): "); result = scanf("%lf %c %lf", &a, &op, &b);
if (result < 3) { printf("Error: 输入的表达式格式不合法!请重新输入.\n"); fflush(stdin); } else { switch (op) { case '+': { printf("计算的结果是: %.2f %c %.2f = %.2f\n", a, op, b, a + b); printf("\n是否继续计算?(输入'y/Y'继续,其他任意键结束): "); scanf(" %c", &again); fflush(stdin); break; }
case '-': {
printf("计算的结果是: %.2f %c %.2f = %.2f\n", a, op, b, a - b); printf("\n是否继续计算?(输入'y/Y'继续,其他任意键结束): "); scanf(" %c", &again); fflush(stdin); break; }
case '*': {
printf("计算的结果是: %.2f %c %.2f = %.2f\n", a, op, b, a * b); printf("\n是否继续计算?(输入'y/Y'继续,其他任意键结束): "); scanf(" %c", &again); fflush(stdin); break; }
case '/': { if (b == 0) printf("Error: 除数为0!请重新输入表达式.\n"); else {
printf("计算的结果是: %.2f %c %.2f = %.2f\n", a, op, b, a / b); printf("\n是否继续计算?(输入'y/Y'继续,其他任意键结束): "); scanf(" %c", &again); fflush(stdin); } break; } } }
} while (again == 'y' || again == 'Y'); return 0; }
|