[英]Why can't you use || in a switch case?
我目前正在學習C編程的基礎知識,並打算嘗試使用switch語句。 我的問題是:
switch (answer)
{
case ('Y' || 'y') :
printf("\nYay! Me too. ");
break;
case ('N' || 'n') :
printf("\nBoo! :(");
break;
default:
printf("\nInput error!");
break;
}
為什么我不能寫|| 在我的不同情況下?
開關盒不支持邏輯操作。 您的解決方案很簡單:
switch (answer)
{
case 'Y':
case 'y':
printf("\nYay! Me too. ");
break;
case 'N':
case 'n':
printf("\nBoo! :(");
break;
default:
printf("\nInput error!");
break;
}
首先,switch requires the
case的表達式為常量,因此不允許使用表達式。
但是,即使允許使用表達式(就像復制了C大部分語法的其他語言一樣,如PHP和Javascript),它也不會做您想要的事情。 該聲明
case <value>:
類似於:
if (answer == (<value>))
因此,如果您寫:
case ('N' || 'n'):
就像是:
if (answer == ('N' || 'n'))
表達式'N' || 'n'
'N' || 'n'
被評估為布爾值,返回1
。 因此,它等效於:
case (1):
這顯然不是您想要的。
您可以使用
switch (tolower(answer)):
然后您只需要與小寫字母進行比較,或者可以使用多個case
語句的直通行為:
case 'N':
case 'n':
案例的常量表達式必須與開關中的變量具有相同的數據類型,並且必須是常量或文字。
執行以下操作:
case 'Y':
case 'y':
printf("Got a Y!");
break;
因為case的值不是布爾值。
您可以使用穿透效果來實現所需的效果:
switch(answer) {
case 'Y':
case 'y':
printf... etc
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.