2013-11-15 37 views
0

在我的功課,我被要求寫同時使用if和switch語句比較由客戶對以下細節支付的淨額程序編譯器拋出一個錯誤情況下,標籤不降低恆定

購買金額(100-200),然後給5%的折扣。

購買金額(200-500),然後給7.5%的折扣。

購買金額(500-800),然後給予10%的折扣。

購買金額(1000以上),然後給予15%的折扣。

這是我能想出的,但同時compliling它給我的錯誤,如

第10行:錯誤:案件標籤不降低到整型常量 13號線:錯誤:案件標籤不減少到整數常量 第17行:錯誤:':'標記之前的預期表達式。 任何人都可以請幫助我這個。我不是正確遵循了問題或者有別的東西,我做錯了

#include<stdio.h> 
main() 
{ 
int pa = 200; 
float net; 
printf("\n Enter purchased amount"); 
scanf("%d",&pa); 
switch(pa) 
{ 
    case 1&&pa<=100: 
    net=pa; 
    break; 
    case pa>=101&&pa<=200:  
     net=pa-(5.00/100.00)*pa; 
    break; 
default: 
     if(pa>=201&&pa<=500) 
     net=pa-(7.5/100.00)*pa; 
     if(pa>=501&&pa<=800) 
     net=pa-(10.00/100.00)*pa; 
     if(pa>=1000) 
     net = pa - (15.00/100.00)*pa; 
     break; 

    } 

    printf("\n the net amount to be paid is%f",net); 
    getch(); 
} 

回答

5

case標籤應該是編譯時間常數。

您不能在case標籤內給出變量。標籤中的表達必須在編譯時進行評估。

如果您想在運行時分支,請使用if-else

+0

感謝您的回答。如果case標籤不需要保持不變,那麼如何使用if和switch語句來編寫這個程序?我有點困惑。 – user2995168

+0

你想用if和case編寫這個程序嗎? – 2013-11-15 07:13:25

+0

是的,這就是問題告訴我的。 – user2995168

0

如果使用開關的情況下,你必須對確切值(常量)如果是

匹配,否則,使用級聯剛看完如何switch/case工作

0

對於範圍相關的條件,它最好使用if/else條件。開關/外殼用於恆定值狀態。

if (pa >= 1 && pa <= 100) { 
     net = pa; 
    } else if (pa>=101&&pa<=200) { 
     net=pa-(5.00/100.00)*pa; 
    } else if (pa>=201&&pa<=500) { 
     net=pa-(7.5/100.00)*pa; 
    } else if (pa>=501&&pa<=800) { 
     net=pa-(10.00/100.00)*pa; 
    } else if (pa>=1000) { 
     net = pa - (15.00/100.00)*pa; 
    } else {`<br/> 
     /* invalid pa handling */ 
    }