我目前正在学习C编程的基础知识,并且即将尝试使用switch语句。 我的问题是:
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.story_list, name='story_list'),
url(r'^storyauthor/(?P<pk>\d+)$',
views.StoryListbyAuthorView.as_view(), name='stories_by_author'),
]
为什么我不能写一个||在我的不同情况下?
答案 0 :(得分:6)
switch case不支持逻辑操作。在您的情况下,解决方案很简单:
switch (answer)
{
case 'Y':
case 'y':
printf("\nYay! Me too. ");
break;
case 'N':
case 'n':
printf("\nBoo! :(");
break;
default:
printf("\nInput error!");
break;
}
答案 1 :(得分:5)
首先,将requires the
case`表达式切换为常量,因此不允许使用表达式。
但即使表达式被允许(因为它已经复制了大部分C的语法,如PHP和Javascript),它也不会做你想要的。声明
case <value>:
类似于:
if (answer == (<value>))
所以如果你写:
case ('N' || 'n'):
就像:
if (answer == ('N' || 'n'))
表达式'N' || 'n'
被评估为布尔值,返回1
。所以它相当于:
case (1):
这显然不是你想要的。
您可以使用
switch (tolower(answer)):
然后您只需要与小写字母进行比较,或者您可以使用多个case
语句的直通行为:
case 'N':
case 'n':
答案 2 :(得分:4)
案例的常量表达式必须与交换机中的变量具有相同的数据类型,并且必须是常量或文字。
执行以下操作:
case 'Y':
case 'y':
printf("Got a Y!");
break;
答案 3 :(得分:2)
因为给case的值不是布尔值。
您可以使用堕落来达到您想要的效果:
switch(answer) {
case 'Y':
case 'y':
printf... etc
答案 4 :(得分:2)
Switch
需要常量表达式。
你有两个选择:
1)使用堕落
switch (answer)
{
case 'a':
case 'b':
<code for 'a' or 'b'>
break;
}
2)在这种特殊情况下,您可以使用与tolower
函数类似的内容来标准化输入。例如:
switch (tolower(answer))
{
case 'a':
<code for 'a' or 'A'>
break;
}