c语言中的计算器输出
我用SwitchCase做了一个简单的计算器程序,但输出结果与我预期的不同c语言中的计算器输出,c,output,calculator,C,Output,Calculator,我用SwitchCase做了一个简单的计算器程序,但输出结果与我预期的不同 int main(){ double a, b; double sum = 0; char o; //operator printf("Enter operator\n"); scanf("%c", &o); printf("Enter first operand\n"); scanf("%f", &a); printf("Enter s
int main(){
double a, b;
double sum = 0;
char o; //operator
printf("Enter operator\n");
scanf("%c", &o);
printf("Enter first operand\n");
scanf("%f", &a);
printf("Enter second operand\n");
scanf("%f", &b);
switch (o)
{
case '+':
sum = a + b;
break;
case '-':
sum = a - b;
break;
case '*':
sum = a * b;
break;
case '/':
sum = a / b;
break;
if (b == 0){ printf("Error"); }
break;
}
printf("The result is\n%10.10lf\n", sum);
getchar();
getchar();
}
“和”的结果是一些巨大的天文数字。有人能告诉我为什么吗 a和b均为双型。scanf中double的正确格式说明符是%lf,而不是用于float的%f
请注意,在printf中,%f用于double或float,因为它被提升为double。由于printf中的C99,%lf与%f相同。请尝试%lf而不是%f,因为这样您将使用a和b作为double而不是float类型。您正在尝试将double转换为float,这在scanf或printf函数中是不可能的。scanf所做的是将整个doubleinput清除/重新格式化为空浮点值。这是一个工作:
#include<stdio.h>
int main(){
double a, b;
double sum = 0;
char o; //operator
printf("Enter operator\n");
scanf("%c", &o);
printf("Enter first operand\n");
scanf("%lf", &a);
printf("Enter second operand\n");
scanf("%lf", &b);
switch (o)
{
case '+':
sum = a + b;
break;
case '-':
sum = a - b;
break;
case '*':
sum = a * b;
break;
case '/':
sum = a / b;
break;
if (b == 0){ printf("Error"); }
break;
}
printf("The result is\n %f\n", sum);
}
正如大家所指出的,您需要扫描%lf,&a;b也一样。 现在,在switch语句中,您希望防止被零除:
case '/':
sum = a / b;
break;
if (b == 0){ printf("Error"); }
break;
但是那里发生的是你打破了;在达到条件之前。假设我们取消了第一次突破;在打印错误消息之前,仍将执行除零操作。
防止被零除的一种方法是:
case '/':
if (b)
sum = a / b;
else
printf("Error");
break;
我们在哪里检查b!=0,然后进行除法或打印错误消息。它可以工作,谢谢!我现在有被零除的问题。它没有打印错误消息,而是显示一个奇怪的结果1.INF或something@user2309261对于该问题,在计算sum=a/b之前,将部件移动到测试b=0;而不是把中间的部分打破。@ Kelar最好不要执行除法,如果目标是检测到除以零就要发生了。但不管怎样,如果参数是浮动的,它有什么好处呢?谢谢大家!我在做的时候修正了它:如果b==0,将浮点数与常数进行比较几乎总是一个坏主意。。。。浮点表示永远不会精确,如果fabsb
case '/':
if (b)
sum = a / b;
else
printf("Error");
break;