C语言部分卷1C语言基础语法
节6格式化输入和输出

这里面的东西还是很多自己没见过,可以当字典一样至少应该看过一遍,自己有印象.下面这个题目自己就出问题了.

image-20241227221026757

被自己菜到了,竟然在这个题目上弄这么久,应该直接问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;

// int ch;
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);
// while ((ch = getchar()) != '\n')
// {
// ;
// }
break;
}

case '-':
{

printf("计算的结果是: %.2f %c %.2f = %.2f\n", a, op, b, a - b);
printf("\n是否继续计算?(输入'y/Y'继续,其他任意键结束): ");
scanf(" %c", &again);
fflush(stdin);
// while ((ch = getchar()) != '\n')
// {
// ;
// }
break;
}

case '*':
{

printf("计算的结果是: %.2f %c %.2f = %.2f\n", a, op, b, a * b);
printf("\n是否继续计算?(输入'y/Y'继续,其他任意键结束): ");
scanf(" %c", &again);
fflush(stdin);
// while ((ch = getchar()) != '\n')
// {
// ;
// }
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);
// while ((ch = getchar()) != '\n')
// {
// ;
// }
}
break;
}
// default:
// {
// printf("Error: 输入的表达式格式不合法!请重新输入.\n");
// fflush(stdin);
// break;
// }
}
}

} while (again == 'y' || again == 'Y');
return 0;
}