2017-02-11 7 views
1
/* C program to find maximum between two numbers using switch case */ 

#include <stdio.h> 

void main() { 
    int m, n; 
    printf("\nEnter the first number\n"); 
    scanf("\n%d", &m); 
    printf("\nEnter the second number\n"); 
    scanf("\n%d", &n); 

    switch (m > n) { /* it will give result either as 0 or 1*/ 
     case 0: 
     printf("\nThe greater number is %d\n", n); 
     break; 
     case 1: 
     printf("\nThe greater number is %d\n", m); 
     break; 
     default: 
     printf("\nBoth number's are same\n"); 
    } 
} 

switchに条件がブール値であるというエラーが表示されます。スイッチケースを使用して2つの数値の間で最大値を見つけるCプログラム

私が間違っていますか?

+0

どのgccのバージョンを使用していますか?私の4.8.4はエラーがないので。 –

+0

MSVCが警告を出します。値は 'true'である必要はありません。 '0'は偽であり、他の全ての値は'真 'である。あなたは安全に 'true'が' 1'と仮定することはできません。たとえば、 'int apples = 5; if(apples){}; 'がtrueに評価され、明らかに' 1'ではありません。 –

+0

_printf( "\ n大きい数字は%d \ n"、n); _これは等しい場合は偽のステートメントです。とにかく、正しいツールを選択しました。この場合、if文になります。 –

答えて

2

m > nは、switchのやや珍しい制御式です。指定できる値は1m > nの場合)または0の場合(の場合)です。範囲外と見なされる余分なdefaultラベルを定義したため、警告が発行されます。

-Wswitch-bool警告がGCC documentation(emhasis鉱山)に記載されている:

switch文は、ブール型のインデックスを有し、 ケースの値がboolean型の範囲外あるたびに警告します。 制御式をbool以外のタイプ にキャスティングしてこの警告を抑制することは可能です。

すべての3つのケースをカバーするために、あなたが表現を別の比較使用できます

switch ((m > n) - (m < n)) { 
    case -1: // m < n 
    case 1: // m > n 
    case 0: // m == n 
} 
+0

ありがとうございました –

2

これは、あなただけのif文のためにすべき問題の一種ですが、あなたは、スイッチケースを使用して設定している場合:変数mがnより大きいかどうかだけを確認することができます。 switch ((m > n) + (m >=n))は、mが大きい場合は2、等しい場合は1、nが大きい場合は0を返します。

+0

ありがとう –

関連する問題