簡體   English   中英

為什么不能使用|| 在開關的情況下?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM