实现以下功能:
1.在进行完一次运算后,询问用户是否继续运算。只要用户输入y/Y就可以继续运算,而不是只能计算一次。
2.当用户的输入有误时,不退出程序,而是要求用户继续输入表达式计算。
提示:
可以考虑使用do...while循环结构,配合循环控制变量来解决,代码仍然都写在main函数中即可。
写完代码后,可以测试一下:在询问循环是否继续时输入"yyyyy",会发生什么情况呢?如何解决?
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void) {
double num1, num2;
char op;
char flag = 'y';
do
{
printf("请输入需要计算的表达式:");
//int ret是看了答案后才用的
int ret = scanf("%lf %c %lf", &num1, &op, &num2);
//如输入多余的运算符或者操作数,则直接退出
if (ret != 3) {
printf("请重新输入\n");
// 不加的话会直接退出
while (getchar() != '\n')
;
continue;
}
switch (op) {
case '+':
printf("%.2f + %.2f = %.2f\n", num1, num2, num1 + num2);
break;
case '-':
printf("%.2f - %.2f = %.2f\n", num1, num2, num1 - num2);
break;
case '*':
printf("%.2f * %.2f = %.2f\n", num1, num2, num1 * num2);
break;
case '/':
{
if (num2 != 0)
{
printf("%.2f / %.2f = %.2f\n", num1, num2, num1 / num2);
}
else
{
printf("Error:除数为0!请重新输入\n");
continue;
}
break;
}
default:
printf("Error:输入的表达式不合法!请重新输入\n");
continue;
}
printf("是否继续计算?(输入'y/Y'继续,其他任意建结束):");
// 不加的话会直接退出
while (getchar() != '\n')
;
scanf("%c", &flag);
} while (flag == 'y' || flag == 'Y');
return 0;
}
随记:
- 需要用到 while (getchar() != '\n'); 清空标准输入缓冲区,否则会直接被读取到‘\n’,然后直接退出程序
- 输入的表达式应当符合格式要求,应当正常录入两个操作数和一个运算符,否则直接退出程序:利用scanf()的返回值解决,scanf()的返回值是成功读取并赋值的输入项个数
待解决:
在询问循环是否继续时输入"yyyyy",会发生什么情况呢?如何解决?