我可以在 switch case 中使用赋值吗?

时间:2021-01-26 23:48:16

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

宝贝编程学生在这里。一项作业要求我使用几个循环从 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 <= 10”)。我做了很多研究,但我的教授或任何 youtube 教程都没有帮助或澄清。我在这里不知所措;我对 switch 语句有什么不理解的地方吗?我感到很失落。

3 个答案:

答案 0 :(得分:2)

在这种情况下使用 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。

答案 1 :(得分: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;
        }
    }

答案 2 :(得分:0)

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

#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