我可以在 switch case 中使用赋值吗?
Can I use an assignment in a switch case?
这里是编程小学生。一项作业要求我使用几个循环从 1 到 100 进行计数,在其中一个循环中,我必须包含一个 switch 语句,该语句根据条件打印一些内容。
这是作业的内容:
“创建一个满足以下要求的基本程序:
- 使用 for 语句从 1 数到 100。
- 使用 while 语句从 1 数到 100。
- 使用 do while 语句从 1 数到 100。
- 在其中一个循环中使用 switch 语句,如果数字是:
小于或等于 10,
大于或等于 11 但小于 20,
大于 21."
我可以很好地完成循环语句,我可以编写 switch 语句,但是将 switch 语句放在已经计数的循环中似乎是不可能的。根据我的理解,switch 语句中的 case 必须是整数值(如'1')并且不能是赋值(如'counter <= 10')。我做了很多研究,但我的教授或任何 YouTube 教程都没有提供任何帮助或帮助。我在这里束手无策;有什么我只是不了解 switch 语句吗?我感到很失落。
同一个语句前可以有多个 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;
}
}
作为一个想法。您可以使用条件运算符。
#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
在这种情况下使用 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 到 100 进行计数,在其中一个循环中,我必须包含一个 switch 语句,该语句根据条件打印一些内容。 这是作业的内容: “创建一个满足以下要求的基本程序:
- 使用 for 语句从 1 数到 100。
- 使用 while 语句从 1 数到 100。
- 使用 do while 语句从 1 数到 100。
- 在其中一个循环中使用 switch 语句,如果数字是: 小于或等于 10, 大于或等于 11 但小于 20, 大于 21."
我可以很好地完成循环语句,我可以编写 switch 语句,但是将 switch 语句放在已经计数的循环中似乎是不可能的。根据我的理解,switch 语句中的 case 必须是整数值(如'1')并且不能是赋值(如'counter <= 10')。我做了很多研究,但我的教授或任何 YouTube 教程都没有提供任何帮助或帮助。我在这里束手无策;有什么我只是不了解 switch 语句吗?我感到很失落。
同一个语句前可以有多个 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;
}
}
作为一个想法。您可以使用条件运算符。
#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
在这种情况下使用 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