2013-09-23 33 views
0

我在C以下代碼:切換和大小寫在c中如何匹配?

typedef enum 
{ 
    Filter_NAME, 
    Filter_NAME_2, 
    Filter_NAME_3   
} Filter; 


void printInfo(int filter) 
{ 
    switch() 
    { 
     case Filter_NAME: 
     // code part1 
     case Filter_NAME_2: 
     // code part2 
     case Filter_NAME_3: 
     // code part3 
     default: 
     return;  
    } 
} 

void main() 
{ 
    int filter = Filter_NAME; 
    printInfo(filter); 
    return 0; 
} 

我只想要執行的code part1,但code part1code part2code part3全部執行,這是什麼問題,如何解決?

+2

[什麼是開關休息?](HTTP:/ /msdn.microsoft.com/en-us/library/66k51h7a.aspx)。 –

+1

你需要說'switch(filter)',你可能需要一些'break'語句。 –

+0

'switch'是一個非常原始的結構,它實際上是一個重複的if(switchVar == caseNValue)goto caseNLabel;'。控制「貫穿」整個「案例」條款。 –

回答

11

您需要在每個case塊之後添加break

void printInfo(int filter) 
{ 
    switch(filter) 
    { 
     case Filter_NAME: 
     // code part1 
     break; 
     case Filter_NAME_2: 
     // code part2 
     break; 
     case Filter_NAME_3: 
     // code part3 
     break; 
     default: 
     return;  
    } 
} 

這將停止傳播到其他情況下塊,它會跳到switch語句的結束。

+0

程序跳轉到與'switch'中的值匹配的'case',然後繼續從那裏運行。它不會自動跳過其他'case's。這就是'break'的用法,它跳出當前的'case'分支。當兩個值導致執行相同的代碼塊時,此行爲可能很有用。 – SvenS

0

C99 standards文檔第6.8.4.2節關於開關和外殼工作的簡要介紹。你也許可以參考句法/語義上的正確。

1

你必須每個part.then後添加「休息」只有部分滿足1然後執行第1部分,然後terminates.otherwise所有情況下將被執行

相關問題