2017-02-27 4 views
-1

Ich versuche zu sehen, ob zwei eingegebene Zahlen (ganze Zahlen) einschließlich negative Zahlen gleichmäßig in 6 gehen (Rest ist 0). Dies ist der Code, den ich versuchte.Testen, ob eine Zahl gleichmäßig in 6 geht?

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");} 

Diese für alle positive ganze Zahl funktioniert aber für alle Negativ des gedruckten Code ist immer „Divisible: weder“ jede Hilfe, wie ich würde sowohl positive als auch negative Zahlen teilbar durch sechs mit einem Rest von 0 zeigen kann wirklich hilfreich

+0

Siehe auch: fizz buzz! –

+2

Sie müssen in der Lage sein, Ihren Code zu debuggen, um ein kompetenter Softwareentwickler zu werden - es sei denn, Sie schreiben im Gegensatz zum Rest von uns immer fehlerfreien Code, der beim ersten Mal fehlerfrei läuft. Ich schlage vor, dass Sie vor der ersten 'if'-Anweisung etwas Code hinzufügen, um die Werte von' in1 ',' in2 ',' in1% 6' und 'in2% 6' auszudrucken, um herauszufinden, was vor sich geht. Viel Glück. –

+0

@MM - Ich glaube, du meintest [fizz buzz] (http://codegolf.stackexchange.com/questions/58615/1-2-fizz-4-buzz) –

Antwort

5

Sie könnten != 0 statt > 0 verwenden. In C gibt % der negativen Zahl ein negatives Ergebnis (oder Null).

Dies ist, weil a/b als truncation-in Richtung Null seit C99 definiert ist (in C90 war es Implementierung definiert). Und a % b ist definiert als a - (a/b) * b.

Beachten Sie, dass Sie diesen Test eigentlich gar nicht benötigen; Sie können auf das Verhalten verlassen if...else nicht else Fall eintritt, wenn der if Fall erfüllt war, zum Beispiel:

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

Eine weitere Überlegung, anstatt Code zu verpflichten Zahlen zu testen 3 mal neu schreiben nur 2 Test durchzuführen auf den Zahlen.

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");} 
    } 
} 
Verwandte Themen