【问题标题】:Can I use an assignment in a switch case?我可以在 switch 案例中使用分配吗?
【发布时间】:2021-04-30 19:17:53
【问题描述】:

这里是婴儿编程学生。一项作业要求我使用几个循环从 1 到 100 进行计数,并且在其中一个循环中,我必须包含一个 switch 语句,该语句根据条件打印一些内容。 这是任务的内容: "创建一个满足以下要求的基本程序:

  1. 使用 for 语句从 1 计数到 100。
  2. 使用 while 语句从 1 计数到 100。
  3. 使用 do while 语句从 1 计数到 100。
  4. 在其中一个循环中使用 switch 语句,如果数字是:则打印到屏幕: 小于或等于 10, 大于或等于 11 但小于 20, 大于 21。”

我可以很好地完成循环语句,并且我可以编写一个 switch 语句,但是在一个已经在计数的循环中放置一个 switch 语句似乎是不可能的。据我了解,switch 语句中的 case 必须是整数值(如 '1'),不能是赋值(如 'counter

【问题讨论】:

  • 抱歉,无法阅读。
  • 您可以将多个(空)案例一个接一个地放置case 1: case 2: /* ... */ case 10: puts("..."); break;,或者您可以尝试switch(i/10) {...}
  • switch((i <= 10) ? 1 : (i < 20) ? 2 : (i <= 21) ? 3 : 4) 这样的东西会起作用,虽然这是在现实生活中没人会写的代码,所以我质疑这个作业的智慧。
  • 这似乎是一个设计不佳的作业。这不是不可能的,甚至是困难的;它只需要一个乏味的解决方案(写下所有case 标签)或杂乱无章的解决方案(使用不等式评估作为switch 标准)。慢慢来吧。
  • 谢谢大家的帮助!我有一种感觉,我不是唯一一个被任务推迟的人。你们都帮了大忙!

标签: c while-loop switch-statement case assignment-operator


【解决方案1】:

您可以在同一语句之前有多个case 标签:

    for (int i = 1; i <= 100; i++)
    {
        switch (i)
        {
        case 1: case 2: case 3: case 4: case 5:
        case 6: case 7: case 8: case 9: case 10:
            printf("%d is less than or equal to 10\n", i);
            break;
        case 11: case 12: case 13: case 14: case 15:
        case 16: case 17: case 18: case 19:
            printf("%d is greater than or equal to 11 but less than 20\n", i);
            break;
        case 20:
        case 21:
            /* nothing printed for 20 or 21? */
            break;
        default:
            /* cases 22 to 100 */
            printf("%d is greater than 21\n", i);
            break;
        }
    }

【讨论】:

  • @0___________ 这是一个代码片段,要被插入一个函数中。好的,我修正了两个错别字。睡觉时间了! :-)
  • 现在可以了 :) ___
【解决方案2】:

作为一个想法。您可以使用条件运算符。

#include <stdio.h>

int main(void) 
{
    while ( 1 )
    {
        printf( "Enter a non-negative number (0 - exit): ");
        
        unsigned int n;
        
        if ( scanf( "%u", &n ) != 1 || n == 0 ) break;
        
        switch ( n <= 10 ? 0 : ( n < 20 ? 1 : ( 21 < n ) ? 2 : 3 ) )
        {
            case 0:
                puts( "The number is less than or equal tp 10" );
                break;
                
            case 1:
                puts( "The number is less than 20" );
                break;
                
            case 2:
                puts( "the number is greater than 21" );
                break;
                
            case 3: default:
                break;
        }
    }
    
    return 0;
}

程序输出可能看起来像

Enter a non-negative number (0 - exit): 10
The number is less than or equal tp 10
Enter a non-negative number (0 - exit): 11
The number is less than 20
Enter a non-negative number (0 - exit): 22
the number is greater than 21
Enter a non-negative number (0 - exit): 21
Enter a non-negative number (0 - exit): 0

【讨论】:

    【解决方案3】:

    在这种情况下使用switch() case 不是一个好主意,这表明你的老师对练习没有更好的主意:)

    另一个数学

        for (int i = 1; i <= 100; i++)
        {
            switch (i/10 + !!(i%10) + i/20 + (i > 21))
            {
                case 1:
                printf("%d is less than or equal to 10\n", i);
                break;
            case 2:
                printf("%d is greater than or equal to 11 but less than 20\n", i);
                break;
            case 3:
            case 4:
                /* nothing printed for 20 or 21? */
                break;
            default:
                /* cases 22 to 100 */
                printf("%d is greater than 21\n", i);
                break;
            }
        }
    

    作为另一个答案的补充,您还可以使用 gcc 扩展:

        for (int i = 1; i <= 100; i++)
        {
            switch (i)
            {
            case 1 ... 10:
                printf("%d is less than or equal to 10\n", i);
                break;
            case 11 ... 19:
                printf("%d is greater than or equal to 11 but less than 20\n", i);
                break;
            case 20:
            case 21:
                /* nothing printed for 20 or 21? */
                break;
            default:
                /* cases 22 to 100 */
                printf("%d is greater than 21\n", i);
                break;
            }
        }
    

    代码从@IanAbbot 答案中被部分窃取(由于懒惰)

    但它不是标准的 C。

    【讨论】:

      猜你喜欢
      • 2015-12-15
      • 2019-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-13
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多