Switch 语句的参数可以有一个表达式来消除用于比较的变量吗?

标签 c switch-statement

<分区>

这个程序模拟了一个简单的菜单驱动的计算器,带有 +、-、* 和/操作

#include <stdio.h>
#include <conio.h>
int main()
{
    float a = 0, b = 0;
    printf(" Enter two numbers: ");
    scanf(" %f %f",&a ,&b);

    puts(" Enter choice number of operation: ");
    puts(" 1)Addition ");
    puts(" 2)Subtraction ");
    puts(" 3)Multiplication ");
    puts(" 4)Division ");

    flushall();    //To clear the trailing '\n'
    switch( getchar() - 48 )
    {
        case 1: printf("The Sum of %.2f and %.2f is : %.2f",a,b,(a+b));
            break;
        case 2: printf("The Difference of %.2f and %.2f is : %.2f",a,b,(a-b));
            break;
        case 3: printf("The Product of %.2f and %.2f is : %.2f",a,b,(a*b));
            break;
        case 4: if ( b != 0 ) printf("The Quotient of %.2f and %.2f is : %.2f",a,b,(a/b));
            else puts("Error, divide by zero not possible.");
            break;
        default: puts("Error, Invalid choice");
    }
    return 0;
}

这样更好吗?由于我已经避免使用变量,并且等效地描述了为什么当最后一个输入不是有效选择时程序会崩溃,所以我认为没有必要添加有关输入内容的信息。它在图片中添加了一个额外的变量。

最佳答案

是的,switch 语句可以采用表达式来表示您切换的值。您的代码应该可以正常工作,除了 getchar() 会从操作数的 scanf 中读取剩余的 '\n' 字符。

在切换之前添加对 getchar() 的另一个调用以读取并丢弃该额外字符。

关于Switch 语句的参数可以有一个表达式来消除用于比较的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27648935/

相关文章:

c - 如何获取从索引a到索引b的数组的最大元素?

C 中双数的正确 printf 格式

javascript - switch 中的函数声明 - 为什么只保留最后一个定义?

c - 在 ‘;’ token 之前应为 ‘:’

python - tkinter 是否可以在同一位置拉出不同的屏幕

c - 如何将文件夹位置作为 C 中此文件夹锁定代码的输入?

c - 函数 lu 分解上的 malloc 数组

C switch 语句的汇编 - 它是如何工作的?

c++ - 阅读 PPM 图像问题

java - 在 Java 中创建 Switchable 类