2017-06-19 2 views
0
switch(at){ 
case (at>0 && at<5) : 
     printf("Average Time Taken (Hrs)\n%d.0",at); 
     printf("Your Salary is Rs.%d",pj*1500 + 5000); 
     break; 

残りのコードは似ています。そして、私はこのためにエラーが発生していますcase (at>0 && at<5) :なぜ論理式をケースラベルとして使用するコードがエラーをスローしますか?

+4

いいえ、不可能です。これはナンセンスです。これがコンパイルされると思った本を焼く。代わりに何を使うかについては – StoryTeller

+0

です: 'if'ステートメント。 –

+0

@StoryTellerそれは可能ではありませんが、実際には意味があります。なぜなら、スイッチ内に式を入れることができればいいのです。 –

答えて

11

私は恐れてこれはできません。章、C11§6.8.4.2

caseラベルの表現を引用することは整数定数式でなければならず、同じswitch文の内の2つのケース の定数式は、変換後に同じ値 を持たなければなりません。 [....]

したがって、caseのラベル式は実行時に生成される値に依存できません。

あなたは、あなたが gcc拡張子を使用して[OK]をしている場合、あなたは case-range syntaxを使用することができ、そうでない場合

switch(at){ 
case 1: 
case 2: 
case 3: 
case 4: 
     printf("Average Time Taken (Hrs)\n%d.0",at); 
     printf("Your Salary is Rs.%d",pj*1500 + 5000); 
     break; 

    //some other case 

のようなもの、欲しいものを達成するためのフォールスルーの構文を使用することができます

のようなもの
switch(at){ 
case 1 ... 4: 
     printf("Average Time Taken (Hrs)\n%d.0",at); 
     printf("Your Salary is Rs.%d",pj*1500 + 5000); 
     break; 
5

switch文の大文字と小文字の値は、コンパイル時定数でなければなりません(リテラルや静的const、またはその1つに#defineなど)。私は最初の比較(及び方向)に引数を逆転している

if (0 < at && at < 5) { 
    printf("Average Time Taken (Hrs)\n%d.0",at); 
    printf("Your Salary is Rs.%d",pj*1500 + 5000); 
} else if (5 <= at && at < 10) { 
    // Your code here 

注:あなたがやろうとしているものについて、あなたはelse ifチェーンを必要とします。同じ変数の複数の比較がある場合は、すべてが同じ方向にある場合は読みやすくなります。

関連する問題