【问题标题】:C Language, Switch Statement [closed]C 语言,Switch 语句
【发布时间】:2021-07-24 21:35:45
【问题描述】:
 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' 代码。

【问题讨论】:

  • 如果你用C而不是C#标记你的问题,你可能会发现你会得到更多的C语言程序员
  • 哦,谢谢你的信息:0

标签: c# c switch-statement conditional-statements


【解决方案1】:

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

你必须像这样通过:

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

【讨论】:

  • 是的,对不起,我的错。它是字符形式的。
  • 好吧,我试过了。输出还是一样,它跳到默认:/.
  • 尝试将scanf("%c \n", &m); 更改为scanf("%c", &m);
【解决方案2】:

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

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

代码在说什么--

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

正如 AbdulBasit 所指出的,虽然 scanf() 确实将用户输入读入变量 m,但交换机正在运行与常量字符 'm' 的比较。

【讨论】:

  • 是的,您好,感谢您的额外输入。不过,即使稍微更改了我的代码,我仍然得到相同的输出:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2011-11-27
相关资源
最近更新 更多