2017-02-27 38 views
-1

我想看看包括負數的兩個輸入數字(整數)是否平均分爲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餘會真正有幫助

+0

另請參閱:fizz buzz! –

+2

你需要能夠調試你的代碼才能成爲一個有能力的軟件開發人員 - 除非你和我們其他人一樣,總是會寫第一次正確運行的無錯代碼。我建議你在第一個'if'語句之前添加一些代碼,以便打印出in1,in2,in1%6和in2%6的值,以便弄清楚發生了什麼。祝你好運。 –

+0

@MM - 我認爲你的意思是[嘶嘶聲](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...else未進入else情況下,如果if情況很滿意,行爲如:

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

另一個要考慮的,而不是迫使代碼來測試號碼3次,重新寫僅執行2測試在numnbers上。

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