#include <stdio.h>
#include <stdbool.h>
int main()
{
float op1, op2;
char ch;
float result;
bool invalid = false;//为什么用的是bool型的变量定义的
printf("请输入式子:");
scanf("%f %c %f", &op1, &ch, &op2);
switch (ch)
{
case '-': op2 = -op2; //为什么这里没有break
case '+': result = op1 + op2; break;
case '*': result = op1 * op2; break;
case '/':
if (op2 != 0)
{
result = op1 / op2;
break;
}
else
{
invalid = true;//这里的 teue用1也可以的吧
break;
}
}
if (invalid)
{
printf("除数不能为零!\n");
}
else
{
printf("结果是:%.2f\n", result);
}
return 0;
}
非0即为真,你可以用任意字符取代判断条件为布尔类型的值。但是规范的判断条件里面类型都是布尔类型的,所以还是建议用布尔类型作为判断条件的类型。为什么没有break?没有break的话会继续执行下面的case直到全部执行完毕或者遇到break为止。举个例子:输入3-5那么它的计算过程是3+(-5)。不懂可以追问,望采纳!吐槽一下,手机答题真难受
逐个回答你的问题:
头文件已包含stdbool.h,所以bool型可以这样定义;
case '-'的时候,op2被转换为负数并赋值给自己;由于c语言在没有break的时候会顺序执行下一条case,所以接下来转入case '+'继续处理,op1 + op2就变成了op1 - op2,能够得到期望的结果。
用1当然可以,这里用布尔值只是为了更加明显地体现作者的意图。