C 开关语句关闭

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

我正在写一个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, 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
的意义。