2017-02-27 16 views
-1

負の数を含む2つの入力数(整数)が6に均等に入るかどうかを調べようとしています(剰余は0です)。これは私が試していたコードです。数字が6に均等になるかどうかテストしますか?

if((in1)%6 == 0 && (in2)%6 == 0){ 
    printf("Divisible: both\n"); 
} 
else if((in1)%6 == 0 && (in2)%6 > 0){ 
    printf("Divisible: only %i\n",in1); 
} 
else if((in1)%6 > 0 && (in2)%6 == 0){ 
    printf("Divisible: only %i\n",in2); 
} 
else{ 
    printf("Divisible: neither\n");} 

これは、すべての正の整数のために動作しますが、任意のネガのために印刷されたコードは常に「可分:どちらも」任意のヘルプを私は次のようになります0の残りの部分と6で割り切れる正の数と負の数の両方を表示することができますどのようにと本当に便利です

+0

他を見る:fizz buzz! –

+2

有能なソフトウェア開発者になるためには、コードをデバッグする必要があります。他の人たちと違って、初めて正しく動作するエラーのないコードを書くつもりでない限り。 'in1'、' in2'、 'in1%6'、' in2%6'の値を出力するために、最初の 'if'文の前にいくつかのコードを追加することをお勧めします。運が良かった。 –

+0

@MM - あなたは[fizz buzz](http://codegolf.stackexchange.com/questions/58615/1-2-fizz-4-buzz)を意味すると思います –

答えて

5

> 0の代わりに!= 0を使用できます。 Cでは、負の数の%は負の結果(またはゼロ)を与えます。

これは、a/bがC99からゼロへの切り捨てとして定義されているからです(C90では実装定義です)。 a % bは、a - (a/b) * bと定義されています。

このテストは実際には必要ありません。

if (in1 % 6 == 0 && in2 % 6 == 0) 
{ 
    // ... 
} 
else if (in1 % 6 == 0) 
{ 
    // would not reach here if in2 % 6 == 0 
} 
else if (in2 % 6 == 0) 
{ 
    // would not reach here if in1 % 6 == 0 
} 
else 
0

別の考慮事項を、だけではなく2テストを実行するための番号を3回、再書き込みをテストするためのコードを義務付ける:あなたは、例えば、ifケースが満たされた場合elseケースに入っていないif...elseの動作に依存することができます数えて

if (in1 % 6) { 
    if (in2 % 6) { 
    printf("Divisible: both\n"); 
    } else { 
    printf("Divisible: only %i\n",in1); 
    } 
} else { 
    if (in2 % 6) { 
    printf("Divisible: only %i\n",in2); 
    } else { 
    printf("Divisible: neither\n");} 
    } 
} 
関連する問題