#include <stdio.h>
// 函数声明
int get_option();
void print_result(int num1, int num2, int result, int option);
int get_number(const char *prompt);
int main(void) {
int done = 0;
int option, num1, num2, result;
while (!done) {
option = get_option();
if (option == 5) {
done = 1;
printf("\n感谢使用,程序已退出。\n");
} else {
do {
num1 = get_number("请输入第一个数:");
num2 = get_number("请输入第二个数:");
if (option == 4 && num2 == 0) {
printf("\n对不起,除数不能为零,请重新输入。\n");
} else {
switch (option) {
case 1:
result = num1 + num2;
break;
case 2:
result = num1 - num2;
break;
case 3:
result = num1 * num2;
break;
case 4:
result = num1 / num2;
break;
}
print_result(num1, num2, result, option);
}
} while (option == 4 && num2 == 0);
}
}
//初始化变量 done 为 0,用于控制循环是否结束。option 用于存储用户选择的操作,num1 和 num2 用于存储用户输入的两个操作数,result 用于存储计算结果。
//进入 while 循环,只要 done 为 0 就会一直循环。因为程序中是!done
//调用 get_option 函数获取用户选择的操作。
//如果用户选择 5,将 done 置为 1,退出循环并输出感谢信息。
//否则,进入 do-while 循环,调用 get_number 函数获取两个操作数。
//如果用户选择除法且除数为 0,输出错误信息并重新输入。
//根据用户选择的操作进行相应的计算,并调用 print_result 函数输出计算结果。
return 0;
}
// 获取用户选择的选项
int get_option() {
int option;
do {
printf("\n ****************");
printf("\n * 1.加法 *");
printf("\n * 2.减法 *");
printf("\n * 3.乘法 *");
printf("\n * 4.除法 *");
printf("\n * 5.退出 *");
printf("\n ****************");
printf("\n请输入您需要的功能:");
scanf("%d", &option);
if (option < 1 || option > 5) {
printf("对不起,您输入的数字有误,请重新输入。\n");
}
} while (option < 1 || option > 5);
return option;
//功能:显示操作菜单,获取用户选择的操作,并确保用户输入的是有效的选项(1 - 5)。
//详细步骤
//定义变量 option 用于存储用户输入的选项。定义的变量不放在循环中
//使用 do-while 循环,不断显示操作菜单并获取用户输入。
//如果用户输入的选项不在 1 - 5 范围内,输出错误信息并要求用户重新输入。
//当用户输入有效的选项时,返回该选项。
}
// 打印计算结果
void print_result(int num1, int num2, int result, int option) {
char operator;
switch (option) {
case 1:
operator = '+';
break;
case 2:
operator = '-';
break;
case 3:
operator = '*';
break;
case 4:
operator = '/';
break;
}
printf("\n** %d %c %d = %d **\n", num1, operator, num2, result);
//功能:根据用户选择的操作,将对应的运算符存储在 operator 变量中,并输出计算结果。
//定义字符变量 operator 用于存储运算符。
//使用 switch 语句根据用户选择的操作,将对应的运算符赋值给 operator。
//使用 printf 函数输出计算结果,格式为 ** num1 operator num2 = result **。
}
// 获取有效的数字输入
int get_number(const char *prompt) {
int number;
while (1) {
printf("%s", prompt);//注意这里的形参只是为了打印传过来的字符串
if (scanf("%d", &number) == 1) {
break;
} else {
printf("输入有误,请重新输入!\n");
while (getchar() != '\n'); // 清除输入缓冲区
}
}
return number;
}
//定义变量 number 用于存储用户输入的数字。
//使用 while (1) 无限循环,不断提示用户输入数字。
//使用 scanf 函数读取用户输入的数字,如果读取成功(返回值为 1),则跳出循环。
//如果读取失败,输出错误信息并使用 while (getchar() != '\n') 清除输入缓冲区,防止错误输入影响后续读取。
//最后返回用户输入的有效数字。
获取用户的选择也可以这样写!!!