C 开关语句关闭
我正在写一个switch语句,它应该像一个简单的计算器一样工作,当我选择case 5时,它应该在单精度和双精度之间切换。然而,当我选择案例5时,我得到的C 开关语句关闭,c,if-statement,switch-statement,C,If Statement,Switch Statement,我正在写一个switch语句,它应该像一个简单的计算器一样工作,当我选择case 5时,它应该在单精度和双精度之间切换。然而,当我选择案例5时,我得到的计算器现在可以以双精度工作。并退出程序。在我添加案例6之前,它实际上是工作的,应该是退出程序的案例6 int opt; float first, second, sum, difference, product, quotient; double first_d, second_d, sum_d, difference_d, product_d
计算器现在可以以双精度工作。
并退出程序。在我添加案例6之前,它实际上是工作的,应该是退出程序的案例6
int opt;
float first, second, sum, difference, product, quotient;
double first_d, second_d, sum_d, difference_d, product_d, quotient_d;
char ch;
printf("This program implements a calculator. Options:\n");
printf(" 1 - addition\n 2 - subtraction\n 3 - multiplication\n 4 - division\n");
printf(" 5 - toggle precision\n 6 - exit program");
ch = getchar();
for(;;) {
printf("Please enter your option:");
scanf("%d", &opt);
switch (opt) {
case 1:
printf("Enter first term:");
scanf("%f", &first);
printf("Enter second term:");
scanf("%f", &second);
sum = first + second;
printf("The sum is: %f\n", sum);
break;
case 2:
printf("Enter first term:");
scanf("%f", &first);
printf("Enter second term:");
scanf("%f", &second);
difference = first - second;
printf("the difference is: %f\n", difference);
break;
case 3:
printf("Enter first term:");
scanf("%f", &first);
printf("Enter second term:");
scanf("%f", &second);
product = first * second;
printf("The product is: %f\n", product);
break;
case 4:
printf("Enter first term:");
scanf("%f", &first);
printf("Enter second term:");
scanf("%f", &second);
quotient = first/ (float)second;
printf("The quotient is: %f\n", quotient);
if(second == 0){
printf("Cannot divide by 0!\n");
}
break;
case 5:
if(ch != '1' && '2' && '3' && '4' && '6'){
printf("Calculator now works with double precision.\n");
switch (opt) {
case 1:
printf("Enter first term:");
scanf("%lf", &first_d);
printf("Enter second term:");
scanf("%lf", &second_d);
sum_d = first_d + second_d;
printf("The sum is: %lf\n", sum_d);
break;
case 2:
printf("Enter first term:");
scanf("%lf", &first_d);
printf("Enter second term:");
scanf("%lf", &second_d);
difference_d = first_d - second_d;
printf("the difference is: %lf\n", difference_d);
break;
case 3:
printf("Enter first term:");
scanf("%lf", &first_d);
printf("Enter second term:");
scanf("%lf", &second_d);
product_d = first_d * second_d;
printf("The product is: %lf\n", product_d);
break;
case 4:
printf("Enter first term:");
scanf("%lf", &first_d);
printf("Enter second term:");
scanf("%lf", &second_d);
quotient_d = first_d/ (double)second_d;
printf("The quotient is: %lf\n", quotient_d);
if(second_d == 0){
printf("Cannot divide by 0!\n");
} else {
printf("Calculator now works with single precision.\n");
}
break;
}
}
case 6:
return 0;
default:
printf(" 1 - addition\n 2 - subtraction\n 3 - multiplication\n 4 - division\n");
printf(" 5 - toggle precision\n 6 - exit program\n");
break;
}
}
}
正如你原来帖子上的评论所说,你只是忘记了休息 在第五种情况下,中断将导致代码离开switch语句并继续循环输入。因为您忘记了这个中断,代码在第五种情况下完成,并继续到第六种情况。然后,第六个案例退出,这就是您最初的输出
在第五个案例的结尾添加一个break语句,您应该都准备好了。您很明显忘记了案例结尾的
break
。我真的不需要看到你描述后的代码。我投票决定以一个简单的打字错误来结束这篇文章。忘记分手与忘记分号相当。谢谢你,我甚至没有注意到。<代码> CH!=1’&&‘2’&‘3’&&‘4’&‘6’是错误的。ch!='1’&&‘2’&‘3’&&‘4’&‘6’
的意思是ch!='1'
。也许你想要ch!='1’&&ch!='2’&&ch!='3’&&ch!='4’&&ch!='6'
。或ch='5'
。但是我不明白使用ch
的意义。