C语言,switch语句

C Language, Switch Statement

 void main()
    {
        printf("     IT Magey      \n");
    
        int code;
    
        printf("\nEnter item code : T");
        scanf("%d", &code);
    
        double price;
        printf("Enter item price : ");
        scanf("%lf", &price);
    
        double dct;
        printf("Enter discount ('%%') : ");
        scanf("%lf", &dct );
    
        char m;
        printf("Enter payment mode (F or I): ");
        scanf("%c \n", &m);
    
        switch (m)
       {
       case 'F':
       case 'f':
        printf("\n");
    
        printf("Payment Details \n");
        printf("-----------------------------\n");
        printf("Item Code : T003256\n");
        printf("Item price: USD 2342.80\n");
    
        double dct1=price*dct/100;
        printf( "Discount: USD%lf \n", dct1);
    
        double amount1=price-dct1;
        printf("Amount to pay: USD%lf", amount1 );
        break;
    
    
       case 'I':
       case 'i':
        printf("\n");
    
        int mth;
        printf("Enter number of installments (months) : ");
        scanf("%d", &mth);
    
        printf("\n");
    
        printf("Payment Details \n");
        printf("-----------------------------\n");
        printf("Item Code : T003256\n");
        printf("Item price: USD 2342.80\n");
    
        double dct2=price*dct/100;
        printf( "Discount: USD%lf \n", dct2);
    
        double amount2=price-dct1;
        printf("Amount to pay: USD%lf", amount2 );
    
        printf("\n");
    
        printf("Number of installments : %d \n", mth);
    
        double amount3=price/mth;
        printf(" Amount to pay per installement : USD%lf", amount3 );
        break;
    
       default:
        printf("Please select only F or I");
    
    
    
    
    
       }

这里是新手,除了默认输出外,我的 switch 语句不会显示任何输出。尽管如此,我还是向它添加了(中断)。如果除了 switch 语句之外还有关于此程序的其他问题,请将它们也列出来。谢谢:)

刚开始使用这个网站,我正在尝试填写更多详细信息,以满足详细信息太少的错误:​​/

编辑#1: 所以把switch('m')改成switch(m)后,我的输出还是一样。如果我尝试使用 if..else if,我希望我的输出只显示 'F' 或 'f' 代码,我得到的是所有 'I' 和 'i'包含代码。

switch语句中传递的参数是一个字符常量'm',而不是你要检查的变量m

你必须这样通过:

switch (m) {
    //your code goes here
}

澄清 AbdulBasit 的答案,该答案大部分是正确的,但并未说明代码编译但给出错误答案的原因。

正如 AbdulBasit 所指出的,switch ('m') 使用的是单个字符 'm'——实际上它本身并不是一个字符串——但它是完全有效的代码。

代码的意思是--

  • 将字符'm'与下列情况下的值进行比较并执行匹配。
  • 比较 'm' 与 'F' 和 'f'。是的,为了非常准确,这是从第一个案例到第二个案例的两个案例。
  • 不匹配,尝试下一个案例。
  • 比较 'm' 与 'I' 和 'i'。
  • 不匹配,尝试下一个案例。
  • 没有下一个案例。如果存在,请尝试默认大小写。
  • 执行默认情况——告诉用户他们需要输入'F'或'I'.

正如 AbdulBasit 指出的那样,虽然 scanf() 确实将用户输入读入变量 m,但开关是 运行 与常量字符 'm' 的比较。