我正在寫一個函數,檢查數字中的每個數字是否都是奇數。我遇到了這種奇怪的行爲。爲什麼第二個函數返回不同(不正確)的結果,儘管它的基本相同? (以相反的方式實現)檢查奇數中的每個數字
#include <stdio.h>
int all_odd_1(int n) {
if (n == 0) return 0;
if (n < 0) n = -n;
while (n > 0) {
if (n&1 == 1)
n /= 10;
else
return 0;
}
return 1;
}
int all_odd_2(int n) {
if (n == 0) return 0;
if (n < 0) n = -n;
while (n > 0) {
if (n&1 == 0)
return 0;
else
n /= 10;
}
return 1;
}
int main() {
printf("all_odd_1\n");
printf("%d\n", all_odd_1(-131));
printf("%d\n", all_odd_1(121));
printf("%d\n", all_odd_1(2242));
printf("-----------------\n");
printf("all_odd_2\n");
printf("%d\n", all_odd_2(131));
printf("%d\n", all_odd_2(121));
printf("%d\n", all_odd_2(2242));
return 0;
}
我沒有收到任何警告,也無法設置它們。你正在使用哪種編譯器。你傳遞給你什麼樣的選擇? – tryt 2010-05-25 20:45:16
我不能確定哪個編譯器nc3b正在使用,但'gcc -Wall'給出逐字警告。 http://gcc.gnu.org/ – msw 2010-05-25 23:22:28
是的,我使用gcc。我沒有提到'使用gcc -Wall',因爲OP沒有提到他的編譯器。 – nc3b 2010-05-26 05:00:46